diff --git a/code/__DEFINES/client_prefs.dm b/code/__DEFINES/client_prefs.dm index b1e194354555..5337f64d9e46 100644 --- a/code/__DEFINES/client_prefs.dm +++ b/code/__DEFINES/client_prefs.dm @@ -1,6 +1,7 @@ #define BE_ALIEN_AFTER_DEATH (1<<0) #define BE_AGENT (1<<1) +//toggle_prefs bits from /datum/preferences #define TOGGLE_IGNORE_SELF (1<<0) // Determines whether you will not hurt yourself when clicking yourself #define TOGGLE_HELP_INTENT_SAFETY (1<<1) // Determines whether help intent will be completely harmless #define TOGGLE_MIDDLE_MOUSE_CLICK (1<<2) // This toggles whether selected ability for xeno uses middle mouse clicking or shift clicking @@ -13,7 +14,7 @@ // and put the empty magazine in your hand #define TOGGLE_AUTOMATIC_PUNCTUATION (1<<7) // Whether your sentences will automatically be punctuated with a period #define TOGGLE_COMBAT_CLICKDRAG_OVERRIDE (1<<8) // Whether disarm/harm intents cause clicks to trigger immediately when the mouse button is depressed. -#define TOGGLE_ALTERNATING_DUAL_WIELD (1<<9) // Whether dual-wielding fires both guns at once or swaps between them. +#define TOGGLE_ALTERNATING_DUAL_WIELD (1<<9) // Whether dual-wielding fires both guns at once or swaps between them, OUTDATED, used to update savefiles, now dual_wield_pref #define TOGGLE_FULLSCREEN (1<<10) // See /client/proc/toggle_fullscreen in client_procs.dm #define TOGGLE_MEMBER_PUBLIC (1<<11) //determines if you get a byond logo by your name in ooc if you're a member or not #define TOGGLE_OOC_FLAG (1<<12) // determines if your country flag appears by your name in ooc chat @@ -32,3 +33,11 @@ #define AGE_MIN 19 //youngest a character can be #define AGE_MAX 90 //oldest a character can be //no. you are not allowed to be 160. #define MAX_GEAR_COST 7 //Used in chargen for loadout limit. + +///dual_wield_pref from /datum/preferences +///Fire both weapons when dual wielding +#define DUAL_WIELD_FIRE 0 +///Swap to the other weapon when dual wielding +#define DUAL_WIELD_SWAP 1 +///Do nothing when dual wielding +#define DUAL_WIELD_NONE 2 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/emote_panels.dm b/code/__DEFINES/emote_panels.dm index 59959818da74..8419f5513cf0 100644 --- a/code/__DEFINES/emote_panels.dm +++ b/code/__DEFINES/emote_panels.dm @@ -6,7 +6,8 @@ #define JOE_EMOTE_CATEGORY_WARNING "Warning" #define JOE_EMOTE_CATEGORY_QUESTION "Question" #define JOE_EMOTE_CATEGORY_NOTICE "Notice" - +#define JOE_EMOTE_CATEGORY_FIRE "Fire" +#define JOE_EMOTE_CATEGORY_DAMAGE "Damage" #define YAUTJA_EMOTE_CATEGORY_FAKESOUND "Fake Sound" #define YAUTJA_EMOTE_CATEGORY_VOICE "Voice Synthesizer" #define YAUTJA_EMOTE_CATEGORY_SPECIES "Yautja" diff --git a/code/__DEFINES/equipment.dm b/code/__DEFINES/equipment.dm index 82e91c5680b8..5f8f27a65711 100644 --- a/code/__DEFINES/equipment.dm +++ b/code/__DEFINES/equipment.dm @@ -551,3 +551,8 @@ var/global/list/uniform_categories = list( #define PHONE_MARINE "Marine" #define PHONE_UPP_SOLDIER "Soldier" #define PHONE_IO "IO" + +#define PHONE_DND_FORCED 2 +#define PHONE_DND_ON 1 +#define PHONE_DND_OFF 0 +#define PHONE_DND_FORBIDDEN -1 diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 9600adcd96da..52263a5e1367 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -260,7 +260,11 @@ var/global/list/job_command_roles = JOB_COMMAND_ROLES_LIST #define JOB_UPP_SRLT_OFFICER "UPP Senior Leytenant" #define JOB_UPP_KPT_OFFICER "UPP Kapitan" #define JOB_UPP_MAY_OFFICER "UPP Mayjor" +#define JOB_UPP_LTKOL_OFFICER "UPP Leytenant Kolonel" #define JOB_UPP_KOL_OFFICER "UPP Kolonel" +#define JOB_UPP_MAY_GENERAL "UPP Mayjor General" +#define JOB_UPP_LT_GENERAL "UPP Leytenant General" +#define JOB_UPP_GENERAL "UPP Army General" #define JOB_UPP_COMBAT_SYNTH "UPP Combat Synthetic" diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 1878ca63f34e..88f194bb33df 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -43,12 +43,6 @@ #define COMSIG_KG_CLIENT_RADIO_DOWN "keybinding_client_radio_down" //Human -#define COMSIG_KB_HUMAN_QUICKEQUIP_DOWN "keybinding_human_quickequip_down" -#define COMSIG_KB_HUMAN_SECONDARY_DOWN "keybinding_human_secondary_down" -#define COMSIG_KB_HUMAN_TERTIARY_DOWN "keybinding_human_tertiary_down" -#define COMSIG_KB_HUMAN_QUATERNARY_DOWN "keybinding_human_quaternary_down" -#define COMSIG_KB_HUMAN_QUICK_EQUIP_DOWN "keybinding_human_quick_equip_down" - #define COMSIG_KB_HUMAN_ISSUE_ORDER "keybinding_human_issue_order" #define COMSIG_KB_HUMAN_ISSUE_ORDER_MOVE "keybinding_human_issue_order_move" #define COMSIG_KB_HUMAN_ISSUE_ORDER_HOLD "keybinding_human_issue_order_hold" @@ -57,12 +51,31 @@ #define COMSIG_KB_HUMAN_SPECIALIST_ACTIVATION_ONE "keybinding_human_specialist_activation_one" #define COMSIG_KB_HUMAN_SPECIALIST_ACTIVATION_TWO "keybinding_human_specialist_activation_two" -#define COMSIG_KB_HUMAN_PICK_UP "keybinding_human_pick_up" - #define COMSIG_KB_HUMAN_ROTATE_CHAIR "keybinding_human_rotate_chair" #define COMSIG_KB_HUMAN_SHOW_HELD_ITEM "keybinding_human_show_held_item" +#define COMSIG_KB_HUMAN_CYCLE_HELMET_HUD "keybinding_human_cycle_helmet_hud" + +// Human Inventory Navigation +#define COMSIG_KB_HUMAN_INTERACT_OTHER_HAND "keybinding_human_interact_other_hand" +#define COMSIG_KB_HUMAN_INTERACT_SLOT_BACK "keybinding_human_interact_slot_back" +#define COMSIG_KB_HUMAN_INTERACT_SLOT_BELT "keybinding_human_interact_slot_belt" +#define COMSIG_KB_HUMAN_INTERACT_SLOT_UNIFORM "keybinding_human_interact_slot_uniform" +#define COMSIG_KB_HUMAN_INTERACT_SLOT_SUIT "keybinding_human_interact_slot_suit" +#define COMSIG_KB_HUMAN_INTERACT_SLOT_HELMET "keybinding_human_interact_slot_helmet" +#define COMSIG_KB_HUMAN_INTERACT_SLOT_LEFT_POUCH "keybinding_human_interact_slot_left_pouch" +#define COMSIG_KB_HUMAN_INTERACT_SLOT_RIGHT_POUCH "keybinding_human_interact_slot_right_pouch" +#define COMSIG_KB_HUMAN_INTERACT_SUIT_S_STORE "keybinding_human_interact_slot_suit_storage" + +#define COMSIG_KB_HUMAN_INTERACT_QUICKEQUIP_DOWN "keybinding_human_interact_quickequip_down" +#define COMSIG_KB_HUMAN_INTERACT_SECONDARY_DOWN "keybinding_human_interact_secondary_down" +#define COMSIG_KB_HUMAN_INTERACT_TERTIARY_DOWN "keybinding_human_interact_tertiary_down" +#define COMSIG_KB_HUMAN_INTERACT_QUATERNARY_DOWN "keybinding_human_interact_quaternary_down" +#define COMSIG_KB_HUMAN_INTERACT_QUICK_EQUIP_DOWN "keybinding_human_interact_quick_equip_down" + +#define COMSIG_KB_HUMAN_INTERACT_PICK_UP "keybinding_human_interact_pick_up" + // Human Combat #define COMSIG_KB_HUMAN_WEAPON_FIELDSTRIP "keybinding_human_weapon_fieldstrip" #define COMSIG_KB_HUMAN_WEAPON_BURSTFIRE "keybinding_human_weapon_burstfire" @@ -185,6 +198,7 @@ //misc yautja #define COMSIG_KB_YAUTJA_TELE_LOC "keybinding_yautja_tele_loc" +#define COMSIG_KB_YAUTJA_FOLD_COMBISTICK "keybinding_yautja_fold_combistick" #define COMSIG_KB_OBSERVER_JOIN_XENO "keybinding_observer_join_as_xeno" #define COMSIG_KB_OBSERVER_JOIN_ERT "keybinding_observer_join_ert" @@ -198,6 +212,7 @@ #define CATEGORY_CARBON "CARBON" #define CATEGORY_HUMAN "HUMAN" #define CATEGORY_HUMAN_COMBAT "HUMAN COMBAT" +#define CATEGORY_HUMAN_INVENTORY "HUMAN INVENTORY" #define CATEGORY_ROBOT "ROBOT" #define CATEGORY_YAUTJA "YAUTJA" #define CATEGORY_MISC "MISC" diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index b73b2a0d89af..854da7a52b4c 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -240,7 +240,7 @@ var/global/list/whitelist_hierarchy = list(WHITELIST_NORMAL, WHITELIST_COUNCIL, #define FACTION_MONKEY "Monkey" // Nanu #define FACTION_LIST_MARINE list(FACTION_MARINE) -#define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_ZOMBIE, FACTION_TWE) +#define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_MARSHAL, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_ZOMBIE, FACTION_TWE) #define FACTION_LIST_ERT list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_MARSHAL, FACTION_TWE) #define FACTION_LIST_WY list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY) #define FACTION_LIST_MARINE_WY list(FACTION_MARINE, FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY) diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index d283656ccae6..e650ebacb8e3 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -115,6 +115,7 @@ #define ALMAYER_DROPSHIP_LZ1 "almayer-hangar-lz1" #define ALMAYER_DROPSHIP_LZ2 "almayer-hangar-lz2" +#define DROPSHIP_FLYBY_ID "special_flight" #define DROPSHIP_LZ1 "dropship-lz1" #define DROPSHIP_LZ2 "dropship-lz2" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 3486988d4d60..b40ae85c3f5f 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -102,6 +102,21 @@ }\ } while (0) +/// Will 100% nuke a trait regardless of source. Preferably use this as little as possible +#define REMOVE_TRAIT_ALLSOURCES(target, trait) \ + do { \ + var/list/_L = target.status_traits; \ + if (_L?[trait]) { \ + if (length(_L)) { \ + _L -= trait; \ + SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ + }; \ + else { \ + target.status_traits = null \ + }; \ + } \ + } while (0) + #define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE) #define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE) #define HAS_TRAIT_FROM_ONLY(target, trait, source) (\ diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index b178f0692dd6..a0a4c927d3d9 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -174,6 +174,10 @@ /// The time it takes for a pylon to give one larva while activated #define XENO_PYLON_ACTIVATION_COOLDOWN (5 MINUTES) +/// The time until you can re-corrupt a comms relay after the last pylon was destroyed +#define XENO_PYLON_DESTRUCTION_DELAY (5 MINUTES) + + /// The time against away_timer when an AFK xeno larva can be replaced #define XENO_LEAVE_TIMER_LARVA 80 //80 seconds /// The time against away_timer when an AFK xeno (not larva) can be replaced diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 66ecf9ea034f..37c623bc3215 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -294,6 +294,8 @@ if(sorted && length(candidates)) candidates = sort_list(candidates, GLOBAL_PROC_REF(cmp_obs_larvaqueuetime_asc)) + GLOB.xeno_queue_candidate_count = length(candidates) + return candidates /** @@ -309,11 +311,11 @@ var/mob/dead/observer/cur_obs = candidates[i] // Generate the messages - var/cached_message = SPAN_XENONOTICE("You are currently [i-dequeued]\th in the larva queue.") + var/cached_message = "You are currently [i-dequeued]\th in the larva queue." cur_obs.larva_queue_cached_message = cached_message if(!cache_only) var/chat_message = dequeued ? replacetext(cached_message, "currently", "now") : cached_message - to_chat(candidates[i], chat_message) + to_chat(candidates[i], SPAN_XENONOTICE(chat_message)) /proc/convert_k2c(temp) return ((temp - T0C)) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 99f621919771..60d2681a1d1a 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -329,7 +329,8 @@ world /// appearance system (overlays/underlays, etc.) is not available. /// /// Only the first argument is required. -/proc/getFlatIcon(image/appearance, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) +/// appearance_flags indicates whether appearance_flags should be respected (at the cost of about 10-20% perf) +/proc/getFlatIcon(image/appearance, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE, appearance_flags = FALSE) // Loop through the underlays, then overlays, sorting them into the layers list #define PROCESS_OVERLAYS_OR_UNDERLAYS(flat, process, base_layer) \ for (var/i in 1 to process.len) { \ @@ -435,11 +436,21 @@ world if(layer_image.alpha == 0) continue + // variables only relevant when accounting for appearance_flags: + var/apply_color = TRUE + var/apply_alpha = TRUE + if(layer_image == copy) // 'layer_image' is an /image based on the object being flattened. curblend = BLEND_OVERLAY add = icon(layer_image.icon, layer_image.icon_state, base_icon_dir) else // 'I' is an appearance object. - add = getFlatIcon(image(layer_image), curdir, curicon, curstate, curblend, FALSE, no_anim) + var/image/layer_as_image = image(layer_image) + if(appearance_flags) + if(layer_as_image.appearance_flags & RESET_COLOR) + apply_color = FALSE + if(layer_as_image.appearance_flags & RESET_ALPHA) + apply_alpha = FALSE + add = getFlatIcon(layer_as_image, curdir, curicon, curstate, curblend, FALSE, no_anim, appearance_flags) if(!add) continue @@ -451,9 +462,9 @@ world if ( addX1 != flatX1 \ - && addX2 != flatX2 \ - && addY1 != flatY1 \ - && addY2 != flatY2 \ + || addX2 != flatX2 \ + || addY1 != flatY1 \ + || addY2 != flatY2 \ ) // Resize the flattened icon so the new icon fits flat.Crop( @@ -464,21 +475,34 @@ world ) flatX1 = addX1 - flatX2 = addY1 - flatY1 = addX2 + flatX2 = addX2 + flatY1 = addY1 flatY2 = addY2 + if(appearance_flags) + // apply parent's color/alpha to the added layers if the layer didn't opt + if(apply_color && appearance.color) + if(islist(appearance.color)) + add.MapColors(arglist(appearance.color)) + else + add.Blend(appearance.color, ICON_MULTIPLY) + + if(apply_alpha && appearance.alpha < 255) + add.Blend(rgb(255, 255, 255, appearance.alpha), ICON_MULTIPLY) + // Blend the overlay into the flattened icon flat.Blend(add, blendMode2iconMode(curblend), layer_image.pixel_x + 2 - flatX1, layer_image.pixel_y + 2 - flatY1) - if(appearance.color) - if(islist(appearance.color)) - flat.MapColors(arglist(appearance.color)) - else - flat.Blend(appearance.color, ICON_MULTIPLY) + if(!appearance_flags) + // If we didn't apply parent colors individually per layer respecting appearance_flags, then do it just the one time now + if(appearance.color) + if(islist(appearance.color)) + flat.MapColors(arglist(appearance.color)) + else + flat.Blend(appearance.color, ICON_MULTIPLY) - if(appearance.alpha < 255) - flat.Blend(rgb(255, 255, 255, appearance.alpha), ICON_MULTIPLY) + if(appearance.alpha < 255) + flat.Blend(rgb(255, 255, 255, appearance.alpha), ICON_MULTIPLY) if(no_anim) //Clean up repeated frames diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 6c689e995504..646b8ec2c854 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -27,3 +27,6 @@ GLOBAL_VAR_INIT(time_offset, setup_offset()) /// Sets the offset 2 lines above. /proc/setup_offset() return rand(10 MINUTES, 24 HOURS) + +/// The last count of possible candidates in the xeno larva queue (updated via get_alien_candidates) +GLOBAL_VAR(xeno_queue_candidate_count) diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index dd7a528bb8a6..6504db0d9f0c 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -94,6 +94,11 @@ Quick adjacency (to turf): /obj/item/Adjacent(atom/neighbor, recurse = 1) if(neighbor == loc || (loc && neighbor == loc.loc)) return TRUE + + // Internal storages have special relationships with the object they are connected to and we still want two depth adjacency for storages + if(istype(loc?.loc, /obj/item/storage/internal) && recurse > 0) + return loc.loc.Adjacent(neighbor, recurse) + if(issurface(loc)) return loc.Adjacent(neighbor, recurse) //Surfaces don't count as storage depth. else if(istype(loc, /obj/item)) 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/entries/general.dm b/code/controllers/configuration/entries/general.dm index 54ec1548c108..cc3d00fd951b 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -273,10 +273,6 @@ Voting /datum/config_entry/string/gamemode_default config_entry_value = "Extended" -// Rounds needed for gamemode vote -/datum/config_entry/number/gamemode_rounds_needed - config_entry_value = 5 - /datum/config_entry/number/rounds_until_hard_restart config_entry_value = -1 // -1 is disabled by default, 0 is every round, x is after so many rounds diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index b154c7673855..6f5b9303a91f 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -390,9 +390,9 @@ SUBSYSTEM_DEF(minimaps) if(!map) return if(minimap_displayed) - owner.client.screen -= map + owner.client.remove_from_screen(map) else - owner.client.screen += map + owner.client.add_to_screen(map) minimap_displayed = !minimap_displayed /datum/action/minimap/give_to(mob/target) @@ -415,7 +415,7 @@ SUBSYSTEM_DEF(minimaps) /datum/action/minimap/remove_from(mob/target) . = ..() if(minimap_displayed) - owner?.client?.screen -= map + owner?.client?.remove_from_screen(map) minimap_displayed = FALSE /** @@ -424,7 +424,7 @@ SUBSYSTEM_DEF(minimaps) /datum/action/minimap/proc/on_owner_z_change(atom/movable/source, oldz, newz) SIGNAL_HANDLER if(minimap_displayed) - owner.client.screen -= map + owner.client.remove_from_screen(map) minimap_displayed = FALSE map = null if(!SSminimaps.minimaps_by_z["[newz]"] || !SSminimaps.minimaps_by_z["[newz]"].hud_image) diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 9a94eb3371f9..1f94e67a8c33 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -383,8 +383,10 @@ SUBSYSTEM_DEF(statpanels) set name = "Open Statbrowser Options" set hidden = TRUE + if (!current_fontsize) + current_fontsize = 12 - var/datum/statbrowser_options/SM = statbrowser_options - if(!SM) - SM = statbrowser_options = new(src, current_fontsize) - SM.tgui_interact() + var/datum/statbrowser_options/options_panel = statbrowser_options + if(!options_panel) + options_panel = statbrowser_options = new(src, current_fontsize) + options_panel.tgui_interact() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index db6c3c71a7fa..88627669aa3b 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -101,17 +101,14 @@ SUBSYSTEM_DEF(ticker) mode.declare_completion(force_ending) REDIS_PUBLISH("byond.round", "type" = "round-complete") flash_clients() - if(text2num(SSperf_logging?.round?.id) % CONFIG_GET(number/gamemode_rounds_needed) == 0) - addtimer(CALLBACK( - SSvote, - /datum/controller/subsystem/vote/proc/initiate_vote, - "gamemode", - "SERVER", - CALLBACK(src, PROC_REF(handle_map_reboot)), - TRUE - ), 3 SECONDS) - else - handle_map_reboot() + addtimer(CALLBACK( + SSvote, + /datum/controller/subsystem/vote/proc/initiate_vote, + "gamemode", + "SERVER", + CALLBACK(src, PROC_REF(handle_map_reboot)), + TRUE + ), 3 SECONDS) Master.SetRunLevel(RUNLEVEL_POSTGAME) /// Attempt to start game asynchronously if applicable 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/disease.dm b/code/datums/disease.dm index e9c399c7b8bf..92986b668b47 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -121,10 +121,10 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease check_range = 1 // everything else, like infect-on-contact things, only infect things on top of it if(isturf(source.loc)) - for(var/mob/living/carbon/M in oview(check_range, source)) - if(isturf(M.loc)) - if(AStar(source.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, check_range)) - M.contract_disease(src, 0, 1, force_spread) + for(var/mob/living/carbon/victim in oview(check_range, source)) + if(isturf(victim.loc)) + if(AStar(source.loc, victim.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, check_range)) + victim.contract_disease(src, 0, 1, force_spread) return @@ -173,8 +173,6 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease var/mob/living/carbon/human/H = affected_mob H.med_hud_set_status() - - /datum/disease/New(process=TRUE)//process = 1 - adding the object to global list. List is processed by master controller. cure_list = list(cure_id) // to add more cures, add more vars to this list in the actual disease's New() if(process) // Viruses in list are considered active. diff --git a/code/datums/diseases/mob_procs.dm b/code/datums/diseases/mob_procs.dm index 7f9704c46f47..c27efecdff84 100644 --- a/code/datums/diseases/mob_procs.dm +++ b/code/datums/diseases/mob_procs.dm @@ -80,9 +80,6 @@ passed = check_disease_pass_clothes(target_zone) - if(!passed && spread_type == AIRBORNE && !internal) - passed = (prob((50*virus.permeability_mod) - 1)) - if(passed) AddDisease(virus) @@ -111,36 +108,39 @@ /mob/living/carbon/human/check_disease_pass_clothes(target_zone) var/obj/item/clothing/Cl + var/protection = 0 switch(target_zone) if(1) if(isobj(head) && !istype(head, /obj/item/paper)) Cl = head - . = prob((Cl.permeability_coefficient*100) - 1) - if(. && wear_mask) - . = prob((Cl.permeability_coefficient*100) - 1) + protection += (Cl.permeability_coefficient*100)-100 + if(isobj(wear_mask)) + Cl = wear_mask + protection += (Cl.permeability_coefficient*100)-100 if(2)//arms and legs included if(isobj(wear_suit)) Cl = wear_suit - . = prob((Cl.permeability_coefficient*100) - 1) - if(. && isobj(WEAR_BODY)) + protection += (Cl.permeability_coefficient*100)-100 + if(isobj(WEAR_BODY)) Cl = WEAR_BODY - . = prob((Cl.permeability_coefficient*100) - 1) + protection += (Cl.permeability_coefficient*100)-100 if(3) if(isobj(wear_suit) && wear_suit.flags_armor_protection & BODY_FLAG_HANDS) Cl = wear_suit - . = prob((Cl.permeability_coefficient*100) - 1) + protection += (Cl.permeability_coefficient*100)-100 - if(. && isobj(gloves)) + if(isobj(gloves)) Cl = gloves - . = prob((Cl.permeability_coefficient*100) - 1) + protection += (Cl.permeability_coefficient*100)-100 if(4) if(isobj(wear_suit) && wear_suit.flags_armor_protection & BODY_FLAG_FEET) Cl = wear_suit - . = prob((Cl.permeability_coefficient*100) - 1) + protection += (Cl.permeability_coefficient*100)-100 - if(. && isobj(shoes)) + if(isobj(shoes)) Cl = shoes - . = prob((Cl.permeability_coefficient*100) - 1) + protection += (Cl.permeability_coefficient*100)-100 else to_chat(src, "Something bad happened with disease target zone code, tell a dev or admin ") + return prob(clamp(protection, 5, 90)) diff --git a/code/datums/emergency_calls/cmb.dm b/code/datums/emergency_calls/cmb.dm index 52da1c967a00..a49c0a4ce273 100644 --- a/code/datums/emergency_calls/cmb.dm +++ b/code/datums/emergency_calls/cmb.dm @@ -100,6 +100,19 @@ to_chat(M, SPAN_BOLD("Corporate Officers chase after paychecks and promotions, but you are motivated to do your sworn duty and care for the population, no matter how far or isolated a colony may be.")) to_chat(M, SPAN_BOLD("Despite being stretched thin, the stalwart oath of the Marshals has continued to keep communities safe, with the CMB well respected by many. You are a representation of that oath, serve with distinction.")) + +// A Nearby Colonial Marshal patrol team responding to Marshals in Distress. +/datum/emergency_call/cmb/alt + name = "CMB - Patrol Team - Marshals in Distress (Friendly)" + mob_max = 5 + mob_min = 1 + probability = 0 + +/datum/emergency_call/cmb/alt/New() + ..() + arrival_message = "CMB Team, this is Anchorpoint Station. We have confirmed you are in distress. Routing nearby units to assist!" + objectives = "Patrol Unit 5807, we have nearby Marshals in Distress! Locate and assist them immediately." + // Anchorpoint Station Colonial Marines, use this primarily for reinforcing or evacuating the CMB, as the CMB themselves are not equipped to handle heavy engagements. /datum/emergency_call/cmb/anchorpoint name = "CMB - Anchorpoint Station Colonial Marine QRF (Friendly)" @@ -113,7 +126,7 @@ /datum/emergency_call/cmb/anchorpoint/New() ..() arrival_message = "[MAIN_SHIP_NAME], this is Anchorpoint Station. Be advised, a QRF Team of our Colonial Marines is currently attempting to board you. Open your ports, transmitting docking codes now. Standby." - objectives = "QRF Team. You are here to reinforce the cmb team we deployed earlier. Make contact and work with the CMB Marshal and their deputies. Facilitate their protection and evacuation if necessary. Secondary Objective: Investigate the reason for distress aboard the [MAIN_SHIP_NAME], and assist the crew if possible." + objectives = "QRF Team. You are here to reinforce the CMB team we deployed earlier. Make contact and work with the CMB Marshal and their deputies. Facilitate their protection and evacuation if necessary. Secondary Objective: Investigate the reason for distress aboard the [MAIN_SHIP_NAME], and assist the crew if possible." /datum/emergency_call/cmb/anchorpoint/create_member(datum/mind/M, turf/override_spawn_loc) var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() diff --git a/code/datums/emergency_calls/inspection.dm b/code/datums/emergency_calls/inspection.dm index 4c33d7d9bfa3..ad0200339952 100644 --- a/code/datums/emergency_calls/inspection.dm +++ b/code/datums/emergency_calls/inspection.dm @@ -183,7 +183,7 @@ /datum/emergency_call/inspection_cmb/New() ..() - arrival_message = "[MAIN_SHIP_NAME], This is Anchorpoint Station with the Colonial Marshal Bureau. Be advised, a CMB transport vessel is preparing to board you, submitting Federal docking clearances now. Standby." + arrival_message = "[MAIN_SHIP_NAME], this is Anchorpoint Station with the Colonial Marshal Bureau. Be advised, a CMB transport vessel is preparing to board you, submitting Federal docking clearances now. Standby." objectives = "Get your instructions from the CMB Office at Anchorpoint Station, and carry out your orders. Ensure that Colonial assets are safe and in your custody. Do not enforce or override Marine Law on a Marine Ship unless requested, as it's outside of your juristiction." will_spawn_icc_liaison = prob(90) @@ -265,7 +265,7 @@ to_chat(M, SPAN_BOLD("Despite being stretched thin, the stalwart oath of the Marshals has continued to keep communities safe, with the CMB well respected by many. You are a representation of that oath, serve with distinction.")) /datum/emergency_call/inspection_cmb/black_market - name = "Inspection - Colonial Marshal Ledger Investigation Team" + name = "Inspection - Colonial Marshals Ledger Investigation Team" mob_max = 3 //Marshal, Deputy, ICC CL mob_min = 2 shuttle_id = "Distress_PMC" diff --git a/code/datums/emergency_calls/whiskey_outpost.dm b/code/datums/emergency_calls/whiskey_outpost.dm index 8a20043da558..436e02007c6c 100644 --- a/code/datums/emergency_calls/whiskey_outpost.dm +++ b/code/datums/emergency_calls/whiskey_outpost.dm @@ -60,7 +60,7 @@ /datum/game_mode/whiskey_outpost/activate_distress() var/datum/emergency_call/em_call = /datum/emergency_call/wo - em_call.activate(FALSE) + em_call.activate(TRUE, FALSE) return /datum/emergency_call/wo/platoon 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/human.dm b/code/datums/keybinding/human.dm index 6580c38083ea..6d7037eac398 100644 --- a/code/datums/keybinding/human.dm +++ b/code/datums/keybinding/human.dm @@ -1,8 +1,3 @@ -#define QUICK_EQUIP_PRIMARY 1 -#define QUICK_EQUIP_SECONDARY 2 -#define QUICK_EQUIP_TERTIARY 3 -#define QUICK_EQUIP_QUATERNARY 4 - /datum/keybinding/human category = CATEGORY_HUMAN weight = WEIGHT_MOB @@ -10,86 +5,6 @@ /datum/keybinding/human/can_use(client/user) return ishuman(user.mob) -/datum/keybinding/human/quick_equip - hotkey_keys = list("E") - classic_keys = list("E") - name = "quick_equip" - full_name = "Unholster" - description = "Take out an available weapon" - keybind_signal = COMSIG_KB_HUMAN_QUICKEQUIP_DOWN - -/datum/keybinding/human/quick_equip/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - H.holster_verb(QUICK_EQUIP_PRIMARY) - return TRUE - -/datum/keybinding/human/quick_equip_secondary - hotkey_keys = list("Shift+E") - classic_keys = list("Shift+E") - name = "quick_equip_secondary" - full_name = "Unholster secondary" - description = "Take out your secondary weapon" - keybind_signal = COMSIG_KB_HUMAN_SECONDARY_DOWN - -/datum/keybinding/human/quick_equip_secondary/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - H.holster_verb(QUICK_EQUIP_SECONDARY) - return TRUE - -/datum/keybinding/human/quick_equip_tertiary - hotkey_keys = list("Ctrl+E", "Alt+E") - classic_keys = list("Ctrl+E", "Alt+E") - name = "quick_equip_tertiary" - full_name = "Unholster tertiary" - description = "Take out your tertiary item." - keybind_signal = COMSIG_KB_HUMAN_TERTIARY_DOWN - -/datum/keybinding/human/quick_equip_tertiary/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - H.holster_verb(QUICK_EQUIP_TERTIARY) - return TRUE - -/datum/keybinding/human/quick_equip_quaternary - hotkey_keys = list("Unbound") - classic_keys = list("Unbound") - name = "quick_equip_quaternary" - full_name = "Unholster quaternary" - description = "Take out your quaternary item." - keybind_signal = COMSIG_KB_HUMAN_QUATERNARY_DOWN - -/datum/keybinding/human/quick_equip_quaternary/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - H.holster_verb(QUICK_EQUIP_QUATERNARY) - return TRUE - -/datum/keybinding/human/quick_equip_inventory - hotkey_keys = list("Unbound") - classic_keys = list("Unbound") - name = "quick_equip_inventory" - full_name = "Quick equip inventory" - description = "Quickly puts an item in the best slot available" - keybind_signal = COMSIG_KB_HUMAN_QUICK_EQUIP_DOWN - -/datum/keybinding/human/quick_equip_inventory/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - H.quick_equip() - return TRUE - /datum/keybinding/human/issue_order hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -103,8 +18,8 @@ . = ..() if(.) return - var/mob/living/carbon/human/H = user.mob - H.issue_order(order) + var/mob/living/carbon/human/human_mob = user.mob + human_mob.issue_order(order) return TRUE /datum/keybinding/human/issue_order/move @@ -139,8 +54,8 @@ . = ..() if(.) return - var/mob/living/carbon/human/H = user.mob - H.spec_activation_one() + var/mob/living/carbon/human/human_mob = user.mob + human_mob.spec_activation_one() return TRUE /datum/keybinding/human/specialist_two @@ -154,24 +69,8 @@ . = ..() if(.) return - var/mob/living/carbon/human/H = user.mob - H.spec_activation_two() - return TRUE - -/datum/keybinding/human/pick_up - hotkey_keys = list("F") - classic_keys = list("Unbound") - name = "pick_up" - full_name = "Pick Up Dropped Items" - keybind_signal = COMSIG_KB_HUMAN_PICK_UP - -/datum/keybinding/human/pick_up/down(client/user) - . = ..() - if(.) - return - - var/mob/living/carbon/human/human_user = user.mob - human_user.pickup_recent() + var/mob/living/carbon/human/human_mob = user.mob + human_mob.spec_activation_two() return TRUE /datum/keybinding/human/rotate_chair @@ -209,7 +108,23 @@ shown_item.showoff(human_user) return TRUE -#undef QUICK_EQUIP_PRIMARY -#undef QUICK_EQUIP_SECONDARY -#undef QUICK_EQUIP_TERTIARY -#undef QUICK_EQUIP_QUATERNARY +/datum/keybinding/human/cycle_helmet_hud + hotkey_keys = list("Unbound") + classic_keys = list("Unbound") + name = "cycle_helmet_hud" + full_name = "Cycle Helmet HUD" + keybind_signal = COMSIG_KB_HUMAN_CYCLE_HELMET_HUD + +/datum/keybinding/human/cycle_helmet_hud/down(client/user) + . = ..() + if(.) + return + + var/mob/living/carbon/human/human_user = user.mob + var/obj/item/clothing/head/helmet/marine/marine_helmet = human_user?.head + var/cycled_hud = marine_helmet?.cycle_huds(human_user) + + var/datum/action/item_action/cycle_helmet_huds/cycle_action = locate() in marine_helmet.actions + cycle_action.set_action_overlay(cycled_hud) + + return TRUE diff --git a/code/datums/keybinding/human_combat.dm b/code/datums/keybinding/human_combat.dm index 003fba3b00bd..2f37efc61438 100644 --- a/code/datums/keybinding/human_combat.dm +++ b/code/datums/keybinding/human_combat.dm @@ -1,6 +1,5 @@ /datum/keybinding/human/combat category = CATEGORY_HUMAN_COMBAT - weight = WEIGHT_MOB /datum/keybinding/human/combat/can_use(client/user) . = ..() diff --git a/code/datums/keybinding/human_inventory.dm b/code/datums/keybinding/human_inventory.dm new file mode 100644 index 000000000000..163cbccdd5c0 --- /dev/null +++ b/code/datums/keybinding/human_inventory.dm @@ -0,0 +1,244 @@ +/datum/keybinding/human/inventory + category = CATEGORY_HUMAN_INVENTORY + +#define QUICK_EQUIP_PRIMARY 1 +#define QUICK_EQUIP_SECONDARY 2 +#define QUICK_EQUIP_TERTIARY 3 +#define QUICK_EQUIP_QUATERNARY 4 + +/datum/keybinding/human/inventory/quick_equip + hotkey_keys = list("E") + classic_keys = list("E") + name = "quick_equip" + full_name = "Unholster" + description = "Take out an available weapon" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_QUICKEQUIP_DOWN + +/datum/keybinding/human/inventory/quick_equip/down(client/user) + . = ..() + if(.) + return + var/mob/living/carbon/human/human_mob = user.mob + human_mob.holster_verb(QUICK_EQUIP_PRIMARY) + return TRUE + +/datum/keybinding/human/inventory/quick_equip_secondary + hotkey_keys = list("Shift+E") + classic_keys = list("Shift+E") + name = "quick_equip_secondary" + full_name = "Unholster secondary" + description = "Take out your secondary weapon" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SECONDARY_DOWN + +/datum/keybinding/human/inventory/quick_equip_secondary/down(client/user) + . = ..() + if(.) + return + var/mob/living/carbon/human/human_mob = user.mob + human_mob.holster_verb(QUICK_EQUIP_SECONDARY) + return TRUE + +/datum/keybinding/human/inventory/quick_equip_tertiary + hotkey_keys = list("Ctrl+E", "Alt+E") + classic_keys = list("Ctrl+E", "Alt+E") + name = "quick_equip_tertiary" + full_name = "Unholster tertiary" + description = "Take out your tertiary item." + keybind_signal = COMSIG_KB_HUMAN_INTERACT_TERTIARY_DOWN + +/datum/keybinding/human/inventory/quick_equip_tertiary/down(client/user) + . = ..() + if(.) + return + var/mob/living/carbon/human/human_mob = user.mob + human_mob.holster_verb(QUICK_EQUIP_TERTIARY) + return TRUE + +/datum/keybinding/human/inventory/quick_equip_quaternary + hotkey_keys = list("Unbound") + classic_keys = list("Unbound") + name = "quick_equip_quaternary" + full_name = "Unholster quaternary" + description = "Take out your quaternary item." + keybind_signal = COMSIG_KB_HUMAN_INTERACT_QUATERNARY_DOWN + +/datum/keybinding/human/inventory/quick_equip_quaternary/down(client/user) + . = ..() + if(.) + return + var/mob/living/carbon/human/human_mob = user.mob + human_mob.holster_verb(QUICK_EQUIP_QUATERNARY) + return TRUE + +#undef QUICK_EQUIP_PRIMARY +#undef QUICK_EQUIP_SECONDARY +#undef QUICK_EQUIP_TERTIARY +#undef QUICK_EQUIP_QUATERNARY + +/datum/keybinding/human/inventory/quick_equip_inventory + hotkey_keys = list("Unbound") + classic_keys = list("Unbound") + name = "quick_equip_inventory" + full_name = "Quick equip inventory" + description = "Quickly puts an item in the best slot available" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_QUICK_EQUIP_DOWN + +/datum/keybinding/human/inventory/quick_equip_inventory/down(client/user) + . = ..() + if(.) + return + var/mob/living/carbon/human/human_mob = user.mob + human_mob.quick_equip() + return TRUE + +/datum/keybinding/human/inventory/pick_up + hotkey_keys = list("F") + classic_keys = list("Unbound") + name = "pick_up" + full_name = "Pick Up Dropped Items" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_PICK_UP + +/datum/keybinding/human/inventory/pick_up/down(client/user) + . = ..() + if(.) + return + + var/mob/living/carbon/human/human_user = user.mob + human_user.pickup_recent() + return TRUE + +/datum/keybinding/human/inventory/interact_other_hand + hotkey_keys = list("Unbound") + classic_keys = list("Unbound") + name = "interact_other_hand" + full_name = "Interact With Other Hand" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_OTHER_HAND + +/datum/keybinding/human/inventory/interact_other_hand/down(client/user) + . = ..() + if(.) + return + + var/mob/living/carbon/human/human_user = user.mob + + var/active_hand = human_user.get_active_hand() + var/inactive_hand = human_user.get_inactive_hand() + + if(!inactive_hand) + return + human_user.click_adjacent(inactive_hand, active_hand) + return TRUE + +#define INTERACT_KEYBIND_COOLDOWN_TIME (0.2 SECONDS) +#define COOLDOWN_SLOT_INTERACT_KEYBIND "slot_interact_keybind_cooldown" + +/datum/keybinding/human/inventory/interact_slot + hotkey_keys = list("Unbound") + classic_keys = list("Unbound") + var/storage_slot + +/datum/keybinding/human/inventory/interact_slot/proc/check_slot(mob/living/carbon/human/user) + return + +/datum/keybinding/human/inventory/interact_slot/down(client/user) + . = ..() + if(.) + return + if(!storage_slot) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_SLOT_INTERACT_KEYBIND)) + return + + TIMER_COOLDOWN_START(src, COOLDOWN_SLOT_INTERACT_KEYBIND, INTERACT_KEYBIND_COOLDOWN_TIME) + var/mob/living/carbon/human/human_user = user.mob + var/obj/item/current_item = check_slot(human_user) + var/obj/item/in_hand_item = human_user.get_active_hand() + + if(in_hand_item) + if(!current_item) + if(!human_user.equip_to_slot_if_possible(in_hand_item, storage_slot, FALSE, FALSE)) + return + return TRUE + + current_item.attackby(in_hand_item, human_user) + return TRUE + + if(!current_item) + return + current_item.attack_hand(human_user) + return TRUE + +/datum/keybinding/human/inventory/interact_slot/back + name = "interact_storage_back" + full_name = "Interact With Back Slot" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SLOT_BACK + storage_slot = WEAR_BACK + +/datum/keybinding/human/inventory/interact_slot/back/check_slot(mob/living/carbon/human/user) + return user.back + +/datum/keybinding/human/inventory/interact_slot/belt + name = "interact_storage_belt" + full_name = "Interact With Belt Slot" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SLOT_BELT + storage_slot = WEAR_WAIST + +/datum/keybinding/human/inventory/interact_slot/belt/check_slot(mob/living/carbon/human/user) + return user.belt + +/datum/keybinding/human/inventory/interact_slot/pouch_left + name = "interact_storage_pouch_left" + full_name = "Interact With Left Pouch Slot" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SLOT_LEFT_POUCH + storage_slot = WEAR_L_STORE + +/datum/keybinding/human/inventory/interact_slot/pouch_left/check_slot(mob/living/carbon/human/user) + return user.l_store + +/datum/keybinding/human/inventory/interact_slot/pouch_right + name = "interact_storage_pouch_right" + full_name = "Interact With Right Pouch Slot" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SLOT_RIGHT_POUCH + storage_slot = WEAR_R_STORE + +/datum/keybinding/human/inventory/interact_slot/pouch_right/check_slot(mob/living/carbon/human/user) + return user.r_store + +/datum/keybinding/human/inventory/interact_slot/uniform + name = "interact_storage_uniform" + full_name = "Interact With Uniform Slot" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SLOT_UNIFORM + storage_slot = WEAR_BODY + +/datum/keybinding/human/inventory/interact_slot/uniform/check_slot(mob/living/carbon/human/user) + return user.w_uniform + +/datum/keybinding/human/inventory/interact_slot/suit + name = "interact_storage_suit" + full_name = "Interact With Suit Slot" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SLOT_SUIT + storage_slot = WEAR_JACKET + +/datum/keybinding/human/inventory/interact_slot/suit/check_slot(mob/living/carbon/human/user) + return user.wear_suit + +/datum/keybinding/human/inventory/interact_slot/helmet + name = "interact_storage_helmet" + full_name = "Interact With Head Slot" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SLOT_HELMET + storage_slot = WEAR_HEAD + +/datum/keybinding/human/inventory/interact_slot/helmet/check_slot(mob/living/carbon/human/user) + return user.head + +/datum/keybinding/human/inventory/interact_slot/suit_storage + name = "interact_storage_suit_store" + full_name = "Interact With Suit Storage Slot" + keybind_signal = COMSIG_KB_HUMAN_INTERACT_SUIT_S_STORE + storage_slot = WEAR_J_STORE + +/datum/keybinding/human/inventory/interact_slot/suit_storage/check_slot(mob/living/carbon/human/user) + return user.s_store + +#undef INTERACT_KEYBIND_COOLDOWN_TIME +#undef COOLDOWN_SLOT_INTERACT_KEYBIND 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/keybinding/yautja.dm b/code/datums/keybinding/yautja.dm index 40ffbf8d16e7..4729db004582 100644 --- a/code/datums/keybinding/yautja.dm +++ b/code/datums/keybinding/yautja.dm @@ -594,3 +594,21 @@ var/mob/living/carbon/human/H = user.mob var/obj/item/device/yautja_teleporter/tele = locate(/obj/item/device/yautja_teleporter) in H.contents tele.add_tele_loc() + + +/datum/keybinding/yautja/fold_combi + hotkey_keys = list("Space") + classic_keys = list("Unbound") + name = "fold_combi" + full_name = "Collapse Combi-stick" + keybind_signal = COMSIG_KB_YAUTJA_FOLD_COMBISTICK + +/datum/keybinding/yautja/fold_combi/down(client/user) + . = ..() + if(.) + return + var/mob/living/carbon/human/human = user.mob + var/obj/item/weapon/yautja/combistick/held_item = human.get_held_item() + if(istype(held_item)) + held_item.fold_combistick() + return TRUE 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/black_market.dm b/code/datums/supply_packs/black_market.dm index 0709811195b4..5f8fae824312 100644 --- a/code/datums/supply_packs/black_market.dm +++ b/code/datums/supply_packs/black_market.dm @@ -448,7 +448,7 @@ Additionally, weapons that are way too good to put in the basically-flavor black containertype = /obj/structure/largecrate/black_market /datum/supply_packs/contraband/seized/small - name = "S&W revolver (x6 magazines included)" + name = "Smith and Wesson revolver (x6 magazines included)" contains = list( /obj/item/weapon/gun/revolver/small, /obj/item/ammo_magazine/revolver/small, 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/datums/supply_packs/gear.dm b/code/datums/supply_packs/gear.dm index b67f8f134c25..54a2ae221c9d 100644 --- a/code/datums/supply_packs/gear.dm +++ b/code/datums/supply_packs/gear.dm @@ -63,15 +63,3 @@ containertype = /obj/structure/closet/crate/ammo containername = "fulton recovery device crate" group = "Gear" - -/datum/supply_packs/nvg - name = "M2 Night Vision Goggles Crate (x3)" - contains = list( - /obj/item/prop/helmetgarb/helmet_nvg, - /obj/item/prop/helmetgarb/helmet_nvg, - /obj/item/prop/helmetgarb/helmet_nvg, - ) - cost = 60 - containertype = /obj/structure/closet/crate/supply - containername = "M2 Night Vission Goggles Crate" - group = "Gear" diff --git a/code/defines/procs/announcement.dm b/code/defines/procs/announcement.dm index 5223d63b8e59..60bf117a6b92 100644 --- a/code/defines/procs/announcement.dm +++ b/code/defines/procs/announcement.dm @@ -125,7 +125,7 @@ //AI shipside announcement, that uses announcement mechanic instead of talking into comms //to ensure that all humans on ship hear it regardless of comms and power -/proc/shipwide_ai_announcement(message, title = MAIN_AI_SYSTEM, sound_to_play = sound('sound/misc/interference.ogg'), signature) +/proc/shipwide_ai_announcement(message, title = MAIN_AI_SYSTEM, sound_to_play = sound('sound/misc/interference.ogg'), signature, ares_logging = ARES_LOG_MAIN) var/list/targets = GLOB.human_mob_list + GLOB.dead_mob_list for(var/mob/T in targets) if(isobserver(T)) @@ -136,8 +136,12 @@ if(!isnull(signature)) message += "

Signed by,
[signature]
" var/datum/ares_link/link = GLOB.ares_link - if(link.interface && !(link.interface.inoperable())) - link.log_ares_announcement(title, message) + if(ares_can_log()) + switch(ares_logging) + if(ARES_LOG_MAIN) + link.log_ares_announcement(title, message) + if(ARES_LOG_SECURITY) + link.log_ares_security(title, message) announcement_helper(message, title, targets, sound_to_play) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 826b2dc0585f..c81da5556e24 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -90,7 +90,7 @@ initialize_power() /area/Initialize(mapload, ...) - icon_state = "" //Used to reset the icon overlay, I assume. + icon = null layer = AREAS_LAYER uid = ++global_uid . = ..() diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index 36271054bb21..effd3325f887 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -356,17 +356,21 @@ Additional game mode variables. else available_xenos_non_ssd += cur_xeno - var/datum/hive_status/hive - for(var/hivenumber in GLOB.hive_datum) - hive = GLOB.hive_datum[hivenumber] - if(!hive.hardcore && hive.stored_larva && (hive.hive_location || (world.time < XENO_BURIED_LARVA_TIME_LIMIT + SSticker.round_start_time))) - if(SSticker.mode && (SSticker.mode.flags_round_type & MODE_RANDOM_HIVE)) - available_xenos |= "any buried larva" - LAZYADD(available_xenos["any buried larva"], hive) - else - var/larva_option = "buried larva ([hive])" - available_xenos += larva_option - available_xenos[larva_option] = list(hive) + // Only offer buried larva if there is no queue: + // This basically means this block of code will almost never execute, because we are instead relying on the hive cores/larva pops to handle their larva + // Technically this should be after a get_alien_candidates() call to be accurate, but we are intentionally trying to not call that proc as much as possible + if(GLOB.xeno_queue_candidate_count < 1) + var/datum/hive_status/hive + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(!hive.hardcore && hive.stored_larva && (hive.hive_location || (world.time < XENO_BURIED_LARVA_TIME_LIMIT + SSticker.round_start_time))) + if(SSticker.mode && (SSticker.mode.flags_round_type & MODE_RANDOM_HIVE)) + available_xenos |= "any buried larva" + LAZYADD(available_xenos["any buried larva"], hive) + else + var/larva_option = "buried larva ([hive])" + available_xenos += larva_option + available_xenos[larva_option] = list(hive) if(!available_xenos.len || (instant_join && !available_xenos_non_ssd.len)) if(!xeno_candidate.client || !xeno_candidate.client.prefs || !(xeno_candidate.client.prefs.be_special & BE_ALIEN_AFTER_DEATH)) @@ -378,7 +382,7 @@ Additional game mode variables. var/mob/dead/observer/candidate_observer = xeno_candidate if(istype(candidate_observer)) if(candidate_observer.larva_queue_cached_message) - to_chat(xeno_candidate, candidate_observer.larva_queue_cached_message) + to_chat(xeno_candidate, SPAN_XENONOTICE(candidate_observer.larva_queue_cached_message)) return FALSE // No cache, lets check now then @@ -389,14 +393,14 @@ Additional game mode variables. cur_hive = GLOB.hive_datum[hive_num] for(var/mob_name in cur_hive.banished_ckeys) if(cur_hive.banished_ckeys[mob_name] == xeno_candidate.ckey) - candidate_observer.larva_queue_cached_message += "\n" + SPAN_WARNING("NOTE: You are banished from the [cur_hive] and you may not rejoin unless the Queen re-admits you or dies. Your queue number won't update until there is a hive you aren't banished from.") + candidate_observer.larva_queue_cached_message += "\nNOTE: You are banished from the [cur_hive] and you may not rejoin unless the Queen re-admits you or dies. Your queue number won't update until there is a hive you aren't banished from." break - to_chat(xeno_candidate, candidate_observer.larva_queue_cached_message) + to_chat(xeno_candidate, SPAN_XENONOTICE(candidate_observer.larva_queue_cached_message)) return FALSE // We aren't in queue yet, lets teach them about the queue then - candidate_observer.larva_queue_cached_message = SPAN_XENONOTICE("You are currently awaiting assignment in the larva queue. The ordering is based on your time of death or the time you joined. When you have been dead long enough and are not inactive, you will periodically receive messages where you are in the queue relative to other currently valid xeno candidates. Your current position will shift as others change their preferences or go inactive, but your relative position compared to all observers is the same. Note: Playing as a facehugger or in the thunderdome will not alter your time of death. This means you won't lose your relative place in queue if you step away, disconnect, play as a facehugger, or play in the thunderdome.") - to_chat(xeno_candidate, candidate_observer.larva_queue_cached_message) + candidate_observer.larva_queue_cached_message = "You are currently awaiting assignment in the larva queue. The ordering is based on your time of death or the time you joined. When you have been dead long enough and are not inactive, you will periodically receive messages where you are in the queue relative to other currently valid xeno candidates. Your current position will shift as others change their preferences or go inactive, but your relative position compared to all observers is the same. Note: Playing as a facehugger or in the thunderdome will not alter your time of death. This means you won't lose your relative place in queue if you step away, disconnect, play as a facehugger, or play in the thunderdome." + to_chat(xeno_candidate, SPAN_XENONOTICE(candidate_observer.larva_queue_cached_message)) return FALSE var/mob/living/carbon/xenomorph/new_xeno @@ -446,6 +450,10 @@ Additional game mode variables. to_chat(xeno_candidate, SPAN_WARNING("You cannot join if the xenomorph is dead.")) return FALSE + if(new_xeno.health <= 0) + to_chat(xeno_candidate, SPAN_WARNING("You cannot join if the xenomorph is in critical condition or unconscious.")) + return FALSE + if(!xeno_bypass_timer) var/deathtime = world.time - xeno_candidate.timeofdeath if(istype(xeno_candidate, /mob/new_player)) 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/game_mode.dm b/code/game/gamemodes/game_mode.dm index f6f75c6ba4e0..5382d80f37a2 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -105,6 +105,7 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki np.new_player_panel_proc() round_time_lobby = world.time log_game("Round started at [time2text(world.realtime)]") + log_game("Operation time at round start is [worldtime2text()]") if(SSticker.mode) log_game("Game mode set to [SSticker.mode]") log_game("Server IP: [world.internet_address]:[world.port]") diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 4d17e4a08803..d416c561fcd3 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -187,9 +187,9 @@ else visible_message(SPAN_WARNING("[user] has deactivated [src]!")) if(status) - icon_state = initial(icon_state) + icon_state = "camera" else - icon_state = "[initial(icon_state)]1" + icon_state = "camera1" // now disconnect anyone using the camera //Apparently, this will disconnect anyone even if the camera was re-activated. //I guess that doesn't matter since they can't use it anyway? diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 5f6cd02a4bf8..516cdad380b1 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -1,30 +1,28 @@ -//these are probably broken - /obj/structure/machinery/floodlight - name = "Emergency Floodlight" + name = "emergency floodlight" + desc = "A powerful light usually stationed near landing zones to provide better visibility." icon = 'icons/obj/structures/machinery/floodlight.dmi' icon_state = "flood00" density = TRUE anchored = TRUE - var/obj/item/cell/cell = null - var/use = 0 - var/unlocked = 0 - var/open = 0 light_power = 2 - unslashable = TRUE - unacidable = TRUE + wrenchable = TRUE + use_power = USE_POWER_IDLE + idle_power_usage = 0 + active_power_usage = 100 var/on_light_range = 6 + ///Whether or not the floodlight can be toggled on or off + var/toggleable = TRUE + + ///Whether or not the floodlight is turned on, disconnected from whether it has power or is lit + var/turned_on = FALSE + /obj/structure/machinery/floodlight/Initialize(mapload, ...) . = ..() - cell = new /obj/item/cell(src) - if(light_on) - set_light(on_light_range) -/obj/structure/machinery/floodlight/Destroy() - QDEL_NULL(cell) - return ..() + turn_light(toggle_on = (operable() && turned_on)) /obj/structure/machinery/floodlight/turn_light(mob/user, toggle_on) . = ..() @@ -36,100 +34,51 @@ else set_light(0) + update_icon() -/obj/structure/machinery/floodlight/proc/updateicon() - icon_state = "flood[open ? "o" : ""][open && cell ? "b" : ""]0[light_on]" - -/obj/structure/machinery/floodlight/attack_hand(mob/user as mob) - if(open && cell) - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(cell) - cell.forceMove(user.loc) - else - cell.forceMove(loc) +/obj/structure/machinery/floodlight/attack_hand(mob/user) + if(!toggleable) + to_chat(user, SPAN_NOTICE("[src] doesn't seem to have a switch to toggle the light.")) + return - cell.add_fingerprint(user) - cell.update_icon() + if(user.lying || user.stat) + return - src.cell = null - to_chat(user, "You remove the power cell.") - updateicon() + if(!is_valid_user(user)) + to_chat(user, SPAN_NOTICE("You don't have the dexterity to do this.")) return - if(light_on) - to_chat(user, SPAN_NOTICE("You turn off the light.")) - turn_light(user, toggle_on = FALSE) - unslashable = TRUE - unacidable = TRUE - else - if(!cell) - return - if(cell.charge <= 0) - return - to_chat(user, SPAN_NOTICE("You turn on the light.")) - turn_light(user, toggle_on = TRUE) - unacidable = FALSE + turned_on = !turned_on - updateicon() + if(inoperable()) + to_chat(user, SPAN_NOTICE("You turn [turned_on ? "on" : "off"] the floodlight. It seems to be inoperable.")) + return + to_chat(user, SPAN_NOTICE("You turn [turned_on ? "on" : "off"] the light.")) + turn_light(user, toggle_on = turned_on) + update_use_power(turned_on ? USE_POWER_ACTIVE : USE_POWER_IDLE) -/obj/structure/machinery/floodlight/attackby(obj/item/W as obj, mob/user as mob) - if(!ishuman(user)) - return +/obj/structure/machinery/floodlight/update_icon() + . = ..() + icon_state = "flood0[light_on]" + +/obj/structure/machinery/floodlight/power_change(area/master_area = null) + . = ..() - if (HAS_TRAIT(W, TRAIT_TOOL_WRENCH)) - if (!anchored) - anchored = TRUE - to_chat(user, "You anchor the [src] in place.") - else - anchored = FALSE - to_chat(user, "You remove the bolts from the [src].") - - if (HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) - if (!open) - if(unlocked) - unlocked = 0 - to_chat(user, "You screw the battery panel in place.") - else - unlocked = 1 - to_chat(user, "You unscrew the battery panel.") - - if (HAS_TRAIT(W, TRAIT_TOOL_CROWBAR)) - if(unlocked) - if(open) - open = 0 - overlays = null - to_chat(user, "You crowbar the battery panel in place.") - else - if(unlocked) - open = 1 - to_chat(user, "You remove the battery panel.") - - if (istype(W, /obj/item/cell)) - if(open) - if(cell) - to_chat(user, "There is a power cell already installed.") - else - if(user.drop_inv_item_to_loc(W, src)) - cell = W - to_chat(user, "You insert the power cell.") - updateicon() + turn_light(toggle_on = (!(stat & NOPOWER) && turned_on)) //Magical floodlight that cannot be destroyed or interacted with. /obj/structure/machinery/floodlight/landing - name = "Landing Light" - desc = "A powerful light stationed near landing zones to provide better visibility." + name = "landing light" + desc = "A powerful light usually stationed near landing zones to provide better visibility. This one seems to have been bolted down and is unable to be moved." icon_state = "flood01" - light_on = TRUE - in_use = 1 use_power = USE_POWER_NONE - -/obj/structure/machinery/floodlight/landing/attack_hand() - return - -/obj/structure/machinery/floodlight/landing/attackby() - return + needs_power = FALSE + unslashable = TRUE + unacidable = TRUE + wrenchable = FALSE + toggleable = FALSE + turned_on = TRUE /obj/structure/machinery/floodlight/landing/floor icon_state = "floor_flood01" diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index f4611b9042db..220772e98b17 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -139,7 +139,6 @@ if (!(R.id in acceptable_reagents)) to_chat(user, SPAN_DANGER("Your [O] contains components unsuitable for cookery.")) return 1 - //G.reagents.trans_to(src,G.amount_per_transfer_from_this) else if(istype(O,/obj/item/grab)) return 1 else @@ -152,74 +151,78 @@ /obj/structure/machinery/microwave/attack_hand(mob/user as mob) user.set_interaction(src) - interact(user) + tgui_interact(user) + +/obj/structure/machinery/microwave/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "Microwave", "Microwave Controls") + ui.open() //******************* //* Microwave Menu //********************/ - -/obj/structure/machinery/microwave/interact(mob/user as mob) // The microwave Menu - var/dat = "" - if(src.broken > 0) - dat = {"Bzzzzttttt"} - else if(src.operating) - dat = {"Microwaving in progress!
Please wait...!
"} - else if(src.dirty==100) - dat = {"This microwave is dirty!
Please clean it before use!
"} - else - var/list/items_counts = new - var/list/items_measures = new - var/list/items_measures_p = new - for (var/obj/O in contents) - var/display_name = O.name - if (istype(O,/obj/item/reagent_container/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/reagent_container/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/reagent_container/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/reagent_container/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/reagent_container/food/snacks/carpmeat)) - items_measures[display_name] = "fillet of meat" - items_measures_p[display_name] = "fillets of meat" - items_counts[display_name]++ - for (var/O in items_counts) - var/N = items_counts[O] - if (!(O in items_measures)) - dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} - else - if (N==1) - dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} - else - dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} - - for (var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if (R.id == "hotsauce") - display_name = "Hotsauce" - if (R.id == "frostoil") - display_name = "Coldsauce" - dat += {"[display_name]: [R.volume] unit\s
"} - - if (items_counts.len==0 && reagents.reagent_list.len==0) - dat = {"The microwave is empty
"} +/obj/structure/machinery/microwave/ui_data(mob/user) + var/list/data = list() + + data["operating"] = operating + data["broken"] = (broken > 0) + data["dirty"] = (dirty == 100) + + var/list/ingredients = list() + var/list/items_counts = list() + var/list/items_measures = list() + var/list/items_measures_p = list() + + for (var/obj/contents_item as anything in contents) + var/display_name = contents_item.name + + if (istype(contents_item, /obj/item/reagent_container/food/snacks/tofu)) + items_measures[display_name] = "tofu chunk" + items_measures_p[display_name] = "tofu chunks" + if (istype(contents_item, /obj/item/reagent_container/food/snacks/meat)) //any meat + items_measures[display_name] = "slab of meat" + items_measures_p[display_name] = "slabs of meat" + if (istype(contents_item, /obj/item/reagent_container/food/snacks/donkpocket)) + display_name = "Turnovers" + items_measures[display_name] = "turnover" + items_measures_p[display_name] = "turnovers" + if (istype(contents_item, /obj/item/reagent_container/food/snacks/carpmeat)) + items_measures[display_name] = "fillet of meat" + items_measures_p[display_name] = "fillets of meat" + items_counts[display_name]++ + + for (var/contents_item in items_counts) + var/list/item = list() + + item["name"] = capitalize(contents_item) + item["count"] = items_counts[contents_item] + + if (!(contents_item in items_measures)) + item["measure"] = "[lowertext(contents_item)][items_counts[contents_item] > 1 ? "s" : ""]" // Adds 's' for plurals. + else if (items_counts[contents_item] == 1) + item["measure"] = items_measures[contents_item] else - dat = {"Ingredients:
[dat]"} - dat += {"

\ -Turn on!
\ -
Eject ingredients!
\ -"} + item["measure"] = items_measures_p[contents_item] + + ingredients += list(item) + + for (var/datum/reagent/contents_reagent as anything in reagents.reagent_list) + var/list/reagent = list() - show_browser(user, dat, "Microwave Controls", "microwave") - return + reagent["count"] = contents_reagent.volume + reagent["measure"] = contents_reagent.volume > 1 ? "units" : "unit" + reagent["name"] = contents_reagent.name + if (contents_reagent.id == "hotsauce") + reagent["name"] = "Hotsauce" + if (contents_reagent.id == "frostoil") + reagent["name"] = "Coldsauce" + ingredients += list(reagent) + + data["ingredients"] = ingredients + return data //*********************************** //* Microwave Menu Handling/Cooking @@ -322,7 +325,7 @@ if (src.reagents.total_volume) src.dirty++ src.reagents.clear_reagents() - to_chat(usr, SPAN_NOTICE(" You dispose of the microwave contents.")) + to_chat(usr, SPAN_NOTICE("You dispose of the microwave contents.")) src.updateUsrDialog() /obj/structure/machinery/microwave/proc/muck_start() @@ -365,19 +368,16 @@ ffuu.reagents.add_reagent("toxin", amount/10) return ffuu -/obj/structure/machinery/microwave/Topic(href, href_list) - if(..()) - return - - usr.set_interaction(src) - if(src.operating) - src.updateUsrDialog() +/obj/structure/machinery/microwave/ui_act(action, params) + . = ..() + if(.) return - switch(href_list["action"]) + switch (action) if ("cook") cook(usr.get_skill_duration_multiplier(SKILL_DOMESTIC)) // picking the right microwave setting for the right food. when's the last time you used the special setting on the microwave? i bet you just slam the 30 second increment. Do you know how much programming went into putting the Pizza setting into a microwave emitter? - if ("dispose") + if ("eject_all") dispose() - return + + return TRUE diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 7855f446c805..c75360e07568 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -11,7 +11,7 @@ black_market_value = 35 var/obj/item/charging = null var/percent_charge_complete = 0 - var/list/allowed_devices = list(/obj/item/weapon/baton, /obj/item/cell, /obj/item/weapon/gun/energy, /obj/item/device/defibrillator, /obj/item/tool/portadialysis, /obj/item/clothing/suit/auto_cpr, /obj/item/smartgun_battery) + var/list/allowed_devices = list(/obj/item/weapon/baton, /obj/item/cell, /obj/item/weapon/gun/energy, /obj/item/device/defibrillator, /obj/item/tool/portadialysis, /obj/item/clothing/suit/auto_cpr, /obj/item/smartgun_battery, /obj/item/device/helmet_visor/night_vision) var/charge_amount = 1000 @@ -181,6 +181,21 @@ update_icon() return + if(istype(charging, /obj/item/device/helmet_visor/night_vision)) + var/obj/item/device/helmet_visor/night_vision/charging_night_vision_visor = charging + if(charging_night_vision_visor.power_cell) + if(!charging_night_vision_visor.power_cell.fully_charged()) + charging_night_vision_visor.power_cell.give(charge_amount) + percent_charge_complete = charging_night_vision_visor.power_cell.percent() + update_use_power(USE_POWER_ACTIVE) + update_icon() + return + + percent_charge_complete = 100 + update_use_power(USE_POWER_IDLE) + update_icon() + return + /* Disable defib recharging if(istype(charging, /obj/item/device/defibrillator)) var/obj/item/device/defibrillator/D = charging diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index b327bd6fdf26..5f26e9d5ed25 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -218,12 +218,20 @@ GLOBAL_LIST_EMPTY(all_static_telecomms_towers) /// Held image for the current overlay on the tower from xeno corruption var/image/corruption_image + /// Holds the delay for when a cluster can recorrupt the comms tower after a pylon has been destroyed + COOLDOWN_DECLARE(corruption_delay) + /obj/structure/machinery/telecomms/relay/preset/tower/mapcomms/Initialize() . = ..() RegisterSignal(src, COMSIG_ATOM_TURF_CHANGE, PROC_REF(register_with_turf)) register_with_turf() +/obj/structure/machinery/telecomms/relay/preset/tower/mapcomms/get_examine_text(mob/user) + . = ..() + if(isxeno(user) && !COOLDOWN_FINISHED(src, corruption_delay)) + . += SPAN_XENO("Corruption cooldown: [(COOLDOWN_TIMELEFT(src, corruption_delay) / (1 SECONDS))] seconds.") + /obj/structure/machinery/telecomms/relay/preset/tower/mapcomms/attack_hand(mob/user) if(user.action_busy) return @@ -323,6 +331,10 @@ GLOBAL_LIST_EMPTY(all_static_telecomms_towers) addtimer(CALLBACK(src, PROC_REF(handle_xeno_acquisition), weeded_turf), (XENO_COMM_ACQUISITION_TIME - ROUND_TIME)) return + if(!COOLDOWN_FINISHED(src, corruption_delay)) + addtimer(CALLBACK(src, PROC_REF(handle_xeno_acquisition), weeded_turf), (COOLDOWN_TIMELEFT(src, corruption_delay))) + return + var/obj/effect/alien/weeds/node/pylon/cluster/parent_node = weeded_turf.weeds.parent var/obj/effect/alien/resin/special/cluster/cluster_parent = parent_node.resin_parent @@ -362,6 +374,8 @@ GLOBAL_LIST_EMPTY(all_static_telecomms_towers) overlays -= corruption_image + COOLDOWN_START(src, corruption_delay, XENO_PYLON_DESTRUCTION_DELAY) + /// Handles moving the overlay from growing to idle /obj/structure/machinery/telecomms/relay/preset/tower/mapcomms/proc/switch_to_idle_corruption() if(!corrupted) 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..56eeb2b8a6d8 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,16 +271,19 @@ 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), list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR), list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR), - list("Ceremonial Sword", 0, /obj/item/storage/large_holster/ceremonial_sword/full, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR), list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY), @@ -316,9 +322,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 +370,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..472db608c0f8 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -19,6 +19,7 @@ list("Plasteel x10", 7, /obj/item/stack/sheet/plasteel/small_stack, null, VENDOR_ITEM_REGULAR), list("Sandbags x25", 10, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_REGULAR), list("Plastic Explosive", 3, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), + list("ES-11 Mobile Fuel Canister", 4, /obj/item/tool/weldpack/minitank, null, VENDOR_ITEM_REGULAR), list("Engineer Kit", 1, /obj/item/storage/toolkit/empty, null, VENDOR_ITEM_REGULAR), list("FIRSTAID KITS", 0, null, null, null), @@ -100,6 +101,9 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Surgical Webbing Vest", 0, /obj/item/clothing/accessory/storage/surg_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Surgical Webbing Vest (Blue)", 0, /obj/item/clothing/accessory/storage/surg_vest/blue, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Surgical Drop Pouch", 0, /obj/item/clothing/accessory/storage/surg_vest/drop_green, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Surgical Drop Pouch (Blue)", 0, /obj/item/clothing/accessory/storage/surg_vest/drop_blue, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Surgical Drop Pouch (Black)", 0, /obj/item/clothing/accessory/storage/surg_vest/drop_black, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Tool Webbing", 0, /obj/item/clothing/accessory/storage/black_vest/tool_webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), @@ -113,8 +117,12 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("Welding Helmet", 0, /obj/item/clothing/head/welding, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), list("SUIT (CHOOSE 1)", 0, null, null, null), - list("M3A1 Pattern Synthetic Utility Vest (UA Gray)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/vanilla, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), - list("M3A1 Pattern Synthetic Utility Vest (Mission-Specific Camo)", 0, /obj/item/clothing/suit/storage/marine/light/synvest, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("M3A1 Pattern Synthetic Utility Vest (Mission-Specific Camo)", 0, /obj/item/clothing/suit/storage/marine/light/synvest, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED), + list("M3A1 Pattern Synthetic Utility Vest (UA Gray)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/grey, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("M3A1 Pattern Synthetic Utility Vest (UA Dark Grey)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/dgrey, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("M3A1 Pattern Synthetic Utility Vest (UA Jungle)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/jungle, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("M3A1 Pattern Synthetic Utility Vest (UA Snow)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/snow, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("M3A1 Pattern Synthetic Utility Vest (UA Desert)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/desert, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), list("GLOVES (CHOOSE 1)", 0, null, null, null), list("Insulated Gloves", 0, /obj/item/clothing/gloves/yellow, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_RECOMMENDED), @@ -173,14 +181,20 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( //------------SNOWFLAKE VENDOR--------------- GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( - list("UNIFORM", 0, null, null, null), + list("USCM UNIFORMS", 0, null, null, null), list("Medical Scrubs, Blue", 12, /obj/item/clothing/under/rank/medical/blue, null, VENDOR_ITEM_REGULAR), list("Medical Scrubs, Green", 12, /obj/item/clothing/under/rank/medical/green, null, VENDOR_ITEM_REGULAR), list("Medical Scrubs, Purple", 12, /obj/item/clothing/under/rank/medical/purple, null, VENDOR_ITEM_REGULAR), list("Medical Scrubs, White", 12, /obj/item/clothing/under/rank/medical, null, VENDOR_ITEM_REGULAR), list("USCM Service Uniform", 12, /obj/item/clothing/under/marine/officer/bridge, null, VENDOR_ITEM_REGULAR), list("USCM Flightsuit", 12, /obj/item/clothing/under/rank/synthetic/flight, null, VENDOR_ITEM_REGULAR), - list("USCM Engineer Uniform", 12, /obj/item/clothing/under/marine/officer/engi, null, VENDOR_ITEM_REGULAR), + list("USCM Engineers Uniform", 12, /obj/item/clothing/under/marine/engineer/standard, null, VENDOR_ITEM_REGULAR), + list("USCM Engineers Uniform (Darker)", 12, /obj/item/clothing/under/marine/engineer/darker, null, VENDOR_ITEM_REGULAR), + list("USCM Engineering Officers Uniform", 12, /obj/item/clothing/under/marine/officer/engi, null, VENDOR_ITEM_REGULAR), + list("USCM Military Police Uniform", 12, /obj/item/clothing/under/marine/mp/standard, null, VENDOR_ITEM_REGULAR), + list("USCM Military Police Uniform (Darker)", 12, /obj/item/clothing/under/marine/mp/darker, null, VENDOR_ITEM_REGULAR), + + list("NON-STANDARD UNIFORMS", 0, null, null, null), list("White T-Shirt and Brown Jeans", 12, /obj/item/clothing/under/tshirt/w_br, null, VENDOR_ITEM_REGULAR), list("Gray T-Shirt and Blue Jeans", 12, /obj/item/clothing/under/tshirt/gray_blu, null, VENDOR_ITEM_REGULAR), list("Red T-Shirt and Black Jeans", 12, /obj/item/clothing/under/tshirt/r_bla, null, VENDOR_ITEM_REGULAR), @@ -200,6 +214,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Marine RPG Glasses", 12, /obj/item/clothing/glasses/regular, null, VENDOR_ITEM_REGULAR), list("Optical Meson Scanner", 12, /obj/item/clothing/glasses/meson, null, VENDOR_ITEM_REGULAR), list("PatrolMate HUD", 12, /obj/item/clothing/glasses/hud/security, null, VENDOR_ITEM_REGULAR), + list("Security HUD Glasses", 12, /obj/item/clothing/glasses/sunglasses/sechud, null, VENDOR_ITEM_REGULAR), list("Sunglasses", 12, /obj/item/clothing/glasses/sunglasses, null, VENDOR_ITEM_REGULAR), list("Welding Goggles", 12, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR), @@ -215,29 +230,36 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Shoes, Yellow", 12, /obj/item/clothing/shoes/yellow, null, VENDOR_ITEM_REGULAR), list("Shoes, Seegson", 24, /obj/item/clothing/shoes/dress, null, VENDOR_ITEM_REGULAR), - list("HELMET", 0, null, null, null), + list("HEADWEAR", 0, null, null, null), list("Beanie", 12, /obj/item/clothing/head/beanie, null, VENDOR_ITEM_REGULAR), list("Beret, Engineering", 12, /obj/item/clothing/head/beret/eng, null, VENDOR_ITEM_REGULAR), list("Beret, Purple", 12, /obj/item/clothing/head/beret/jan, null, VENDOR_ITEM_REGULAR), list("Beret, Red", 12, /obj/item/clothing/head/beret/cm/red, null, VENDOR_ITEM_REGULAR), list("Beret, Standard", 12, /obj/item/clothing/head/beret/cm, null, VENDOR_ITEM_REGULAR), list("Beret, Tan", 12, /obj/item/clothing/head/beret/cm/tan, null, VENDOR_ITEM_REGULAR), + list("Beret, Black", 12, /obj/item/clothing/head/beret/cm/black, null, VENDOR_ITEM_REGULAR), + list("Beret, White", 12, /obj/item/clothing/head/beret/cm/white, null, VENDOR_ITEM_REGULAR), list("Surgical Cap, Blue", 12, /obj/item/clothing/head/surgery/blue, null, VENDOR_ITEM_REGULAR), list("Surgical Cap, Blue", 12, /obj/item/clothing/head/surgery/purple, null, VENDOR_ITEM_REGULAR), list("Surgical Cap, Green", 12, /obj/item/clothing/head/surgery/green, null, VENDOR_ITEM_REGULAR), 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), + + list("HELMET", 0, null, null, null), + list("Marine Helmet (Mission-Specific Camo)", 12, /obj/item/clothing/head/helmet/marine, null, VENDOR_ITEM_REGULAR), + list("Marine Helmet (Grey)", 12, /obj/item/clothing/head/helmet/marine/grey, null, VENDOR_ITEM_REGULAR), + list("Marine Helmet (Jungle)", 12, /obj/item/clothing/head/helmet/marine/jungle, null, VENDOR_ITEM_REGULAR), + list("Marine Helmet (Snow)", 12, /obj/item/clothing/head/helmet/marine/snow, null, VENDOR_ITEM_REGULAR), + list("Marine Helmet (Desert)", 12, /obj/item/clothing/head/helmet/marine/desert, null, VENDOR_ITEM_REGULAR), list("Technician Helmet", 12, /obj/item/clothing/head/helmet/marine/tech, null, VENDOR_ITEM_REGULAR), list("Corpsman Helmet", 12, /obj/item/clothing/head/helmet/marine/medic, null, VENDOR_ITEM_REGULAR), list("Attachable Helmet Shield", 12, /obj/item/prop/helmetgarb/riot_shield, null, VENDOR_ITEM_REGULAR), - list("SUIT", 0, null, null, null), list("Bomber Jacket, Brown", 12, /obj/item/clothing/suit/storage/bomber, null, VENDOR_ITEM_REGULAR), list("Bomber Jacket, Black", 12, /obj/item/clothing/suit/storage/bomber/alt, null, VENDOR_ITEM_REGULAR), @@ -259,7 +281,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Labcoat, Researcher", 12, /obj/item/clothing/suit/storage/labcoat/researcher, null, VENDOR_ITEM_REGULAR), list("Quartermaster Jacket", 12, /obj/item/clothing/suit/storage/RO, null, VENDOR_ITEM_REGULAR), list("Bio Suit", 12, /obj/item/clothing/suit/storage/synthbio, null, VENDOR_ITEM_REGULAR), - list("USCM Poncho", 12, /obj/item/clothing/accessory/poncho, null, VENDOR_ITEM_REGULAR), + list("USCM Poncho (Mission-Specific Camo)", 12, /obj/item/clothing/accessory/poncho, null, VENDOR_ITEM_REGULAR), + list("USCM Poncho (Green)", 12, /obj/item/clothing/accessory/poncho/green, null, VENDOR_ITEM_REGULAR), + list("USCM Poncho (Brown)", 12, /obj/item/clothing/accessory/poncho/brown, null, VENDOR_ITEM_REGULAR), + list("USCM Poncho (Black)", 12, /obj/item/clothing/accessory/poncho/black, null, VENDOR_ITEM_REGULAR), + list("USCM Poncho (Blue)", 12, /obj/item/clothing/accessory/poncho/blue, null, VENDOR_ITEM_REGULAR), + list("USCM Poncho (Purple)", 12, /obj/item/clothing/accessory/poncho/purple, null, VENDOR_ITEM_REGULAR), + list("BACKPACK", 0, null, null, null), list("Backpack, Industrial", 12, /obj/item/storage/backpack/industrial, null, VENDOR_ITEM_REGULAR), @@ -271,6 +299,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("USCM RTO Pack", 12, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_REGULAR), list("USCM Welderpack", 12, /obj/item/storage/backpack/marine/engineerpack, null, VENDOR_ITEM_REGULAR), list("USCM Weldersatchel", 12, /obj/item/storage/backpack/marine/engineerpack/satchel, null, VENDOR_ITEM_REGULAR), + list("USCM Welder Chestrig", 12, /obj/item/storage/backpack/marine/engineerpack/welder_chestrig, null, VENDOR_ITEM_REGULAR), list("OTHER", 0, null, null, null), list("Red Armband", 6, /obj/item/clothing/accessory/armband, 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..ad10037ccfe1 100644 --- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm +++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm @@ -7,7 +7,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_intelligence_officer, list( list("SUPPLIES", 0, null, null, null), list("Power Control Module", 5, /obj/item/circuitboard/apc, null, VENDOR_ITEM_REGULAR), list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), - list("M2 Night Vision Goggles", 25, /obj/item/prop/helmetgarb/helmet_nvg, null, VENDOR_ITEM_RECOMMENDED), + list("Night Vision Optic", 25, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED), list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR), list("Intel Radio Encryption Key", 5, /obj/item/device/encryptionkey/intel, null, VENDOR_ITEM_REGULAR), list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), @@ -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/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm index 543c601bda37..c0daad04f0ce 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm @@ -24,7 +24,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), list("Sandbags x25", 10, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED), list("Super-Capacity Power Cell", 10, /obj/item/cell/super, null, VENDOR_ITEM_REGULAR), - list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR), list("ES-11 Mobile Fuel Canister", 4, /obj/item/tool/weldpack/minitank, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), @@ -62,7 +61,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("Machete Pouch (Full)", 8, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR), list("USCM Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_REGULAR), list("Fuel Tank Strap Pouch", 4, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR), - list("Welding Goggles", 3, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR), list("Sling Pouch", 6, /obj/item/storage/pouch/sling, null, VENDOR_ITEM_REGULAR), list("Large General Pouch", 6, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR), list("M276 Pattern Combat Toolbelt Rig", 15, /obj/item/storage/belt/gun/utility, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm index ea3423260ec0..9845ff9cb610 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm @@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list( list("Machete Pouch (Full)", 4, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR), list("USCM Radio Telephone Pack", 5, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_REGULAR), list("M276 Pattern Combat Toolbelt Rig", 15, /obj/item/storage/belt/gun/utility, null, VENDOR_ITEM_REGULAR), - list("M2 Night Vision Goggles", 20, /obj/item/prop/helmetgarb/helmet_nvg, null, VENDOR_ITEM_RECOMMENDED), + list("Night Vision Optic", 20, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED), list("UTILITIES", 0, null, null, null), list("Whistle", 3, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm index 94768340c60e..222cd4693cd2 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm @@ -148,6 +148,7 @@ list("MISCELLANEOUS", -1, null, null, null), list("Ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles, VENDOR_ITEM_REGULAR), + list("M1A1 Ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles/v2, VENDOR_ITEM_REGULAR), list("Prescription ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles/prescription, VENDOR_ITEM_REGULAR), list("Marine RPG glasses", round(scale * 10), /obj/item/clothing/glasses/regular, VENDOR_ITEM_REGULAR), list("M5 Integrated Gas Mask", round(scale * 10), /obj/item/prop/helmetgarb/helmet_gasmask, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm index c03d79eddfd0..875f84264c0a 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm @@ -40,7 +40,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list( list("M276 Pattern Combat Toolbelt Rig", 15, /obj/item/storage/belt/gun/utility, null, VENDOR_ITEM_REGULAR), list("Autoinjector Pouch (Full)", 15, /obj/item/storage/pouch/autoinjector/full, null, VENDOR_ITEM_REGULAR), list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR), - list("M2 Night Vision Goggles", 30, /obj/item/prop/helmetgarb/helmet_nvg, null, VENDOR_ITEM_RECOMMENDED), + list("Night Vision Optic", 30, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED), list("UTILITIES", 0, null, null, null), list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/effects/landmarks/survivor_spawner.dm b/code/game/objects/effects/landmarks/survivor_spawner.dm index 25cc1a80d0b4..fe4254982d57 100644 --- a/code/game/objects/effects/landmarks/survivor_spawner.dm +++ b/code/game/objects/effects/landmarks/survivor_spawner.dm @@ -145,7 +145,7 @@ intro_text = list("

You are a member of a UPP recon force!

",\ "You ARE aware of the xenomorph threat.",\ "Your primary objective is to survive. You believe a second dropship crashed somewhere to the south east, which was carrying additional weapons") - story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route, but is the enemy of my enemy truly your friend?" + story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route." spawn_priority = SPAWN_PRIORITY_LOW /obj/effect/landmark/survivor_spawner/upp_sapper @@ -154,7 +154,7 @@ intro_text = list("

You are a member of a UPP recon force!

",\ "You ARE aware of the xenomorph threat.",\ "Your primary objective is to survive. You believe a second dropship crashed somewhere to the south east, which was carrying additional weapons") - story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route, but is the enemy of my enemy truly your friend?" + story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route." spawn_priority = SPAWN_PRIORITY_MEDIUM /obj/effect/landmark/survivor_spawner/upp_medic @@ -163,7 +163,7 @@ intro_text = list("

You are a member of a UPP recon force!

",\ "You ARE aware of the xenomorph threat.",\ "Your primary objective is to survive. You believe a second dropship crashed somewhere to the south east, which was carrying additional weapons") - story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route, but is the enemy of my enemy truly your friend?" + story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route." spawn_priority = SPAWN_PRIORITY_MEDIUM /obj/effect/landmark/survivor_spawner/upp_specialist @@ -172,7 +172,7 @@ intro_text = list("

You are a member of a UPP recon force!

",\ "You ARE aware of the xenomorph threat.",\ "Your primary objective is to survive. You believe a second dropship crashed somewhere to the south east, which was carrying additional weapons") - story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route, but is the enemy of my enemy truly your friend?" + story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route." spawn_priority = SPAWN_PRIORITY_HIGH /obj/effect/landmark/survivor_spawner/squad_leader @@ -181,5 +181,5 @@ intro_text = list("

You are a member of a UPP recon force!

",\ "You ARE aware of the xenomorph threat.",\ "Your primary objective is to survive. You believe a second dropship crashed somewhere to the south east, which was carrying additional weapons") - story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route, but is the enemy of my enemy truly your friend?" + story_text = "Your orders were simple, Recon the site, ascertain if there is a biological weapons program in the area, and if so to secure the colony and retrieve a sample. However your team failed to account for an active anti-air battery near the area. Both your craft and your sister ship crashed. Barely having a chance to catch your breath, you found yourself being assailed by vile xenomorphs! You and your team have barely held your ground, at the cost of four of your own, but more are coming and ammo is low. You believe an American rescue force is en route." spawn_priority = SPAWN_PRIORITY_VERY_HIGH diff --git a/code/game/objects/effects/spawners/prop_gun_spawner.dm b/code/game/objects/effects/spawners/prop_gun_spawner.dm index b04f6cffffe1..5e620994e7fb 100644 --- a/code/game/objects/effects/spawners/prop_gun_spawner.dm +++ b/code/game/objects/effects/spawners/prop_gun_spawner.dm @@ -17,7 +17,7 @@ stack_trace("[src] using incorrect typepath, \"[prop_gun_type]\".") //Can't make a prop gun of something not a gun qdel(src) return - if(!spawn_prob) + if(!prob(spawn_prob)) qdel(src) return if(!mapload) @@ -71,6 +71,7 @@ pixel_x = source_gun.pixel_x pixel_y = source_gun.pixel_y layer = source_gun.layer + overlays = source_gun.overlays /obj/item/prop/prop_gun/attack_self(mob/user) //Mimic wielding of real guns . = ..() 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/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 6795f8b436dc..e795f4e28de4 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -65,6 +65,7 @@ if(on) on = FALSE set_light_on(on) + update_icon() for(var/X in actions) var/datum/action/A = X A.update_button_icon() diff --git a/code/game/objects/items/devices/helmet_visors.dm b/code/game/objects/items/devices/helmet_visors.dm index dd913daf7620..596409c88c8b 100644 --- a/code/game/objects/items/devices/helmet_visors.dm +++ b/code/game/objects/items/devices/helmet_visors.dm @@ -14,31 +14,65 @@ ///The sound when toggling off the visor var/toggle_off_sound = 'sound/handling/hud_off.ogg' - ///The icon name for our helmet's action + ///The icon name for our helmet's action, in 'icons/obj/items/clothing/helmet_visors.dmi' var/action_icon_string = "hud_sight_down" - ///The overlay name for when our visor is active + ///The overlay name for when our visor is active, in 'icons/mob/humans/onmob/helmet_garb.dmi' var/helmet_overlay = "hud_sight_right" +/obj/item/device/helmet_visor/Destroy(force) + if(!istype(loc, /obj/item/clothing/head/helmet/marine)) + return ..() + + if(!istype(loc?.loc, /mob/living/carbon/human)) + return ..() + + var/obj/item/clothing/head/helmet/marine/attached_helmet = loc + var/mob/living/carbon/human/user = loc.loc + deactivate_visor(attached_helmet, user) + . = ..() + /// Called to see if the user can even use this visor /obj/item/device/helmet_visor/proc/can_toggle(mob/living/carbon/human/user) return TRUE /// Called to see if this visor is a special non-HUD visor -/obj/item/device/helmet_visor/proc/visor_function(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user, silent = FALSE) +/obj/item/device/helmet_visor/proc/toggle_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user, silent = FALSE) if(attached_helmet == user.head && attached_helmet.active_visor == src) - var/datum/mob_hud/current_mob_hud = huds[hud_type] - current_mob_hud.add_hud_to(user, attached_helmet) + + if(!can_toggle(user)) + return FALSE + + activate_visor(attached_helmet, user) + if(!silent) to_chat(user, SPAN_NOTICE("You activate [src] on [attached_helmet].")) + playsound_client(user.client, toggle_on_sound, null, 75) + return TRUE - var/datum/mob_hud/current_mob_hud = huds[hud_type] - current_mob_hud.remove_hud_from(user, attached_helmet) + deactivate_visor(attached_helmet, user) + if(!silent) to_chat(user, SPAN_NOTICE("You deactivate [src] on [attached_helmet].")) + playsound_client(user.client, toggle_off_sound, null, 75) + return TRUE +/// Called by toggle_visor() to activate the visor's effects +/obj/item/device/helmet_visor/proc/activate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + var/datum/mob_hud/current_mob_hud = huds[hud_type] + current_mob_hud.add_hud_to(user, attached_helmet) + +/// Called by toggle_visor() to deactivate the visor's effects +/obj/item/device/helmet_visor/proc/deactivate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + var/datum/mob_hud/current_mob_hud = huds[hud_type] + current_mob_hud.remove_hud_from(user, attached_helmet) + +/// Called by /obj/item/clothing/head/helmet/marine/get_examine_text(mob/user) to get extra examine text for this visor +/obj/item/device/helmet_visor/proc/get_helmet_examine_text() + return SPAN_NOTICE("\A [name] is flipped down.") + /obj/item/device/helmet_visor/medical name = "basic medical optic" icon_state = "med_sight" @@ -50,13 +84,75 @@ name = "advanced medical optic" helmet_overlay = "med_sight_left" +/obj/item/device/helmet_visor/medical/advanced/activate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + . = ..() + + var/datum/action/item_action/view_publications/helmet_visor/publication_action = new(attached_helmet) + publication_action.give_to(user) + +/obj/item/device/helmet_visor/medical/advanced/deactivate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + . = ..() + + var/datum/action/item_action/view_publications/helmet_visor/publication_action = locate() in attached_helmet.actions + qdel(publication_action) + /obj/item/device/helmet_visor/medical/advanced/can_toggle(mob/living/carbon/human/user) + . = ..() + if(!.) + return + if(!skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC)) to_chat(user, SPAN_NOTICE("You are not skilled enough to use [src].")) return FALSE return TRUE +/obj/item/device/helmet_visor/medical/advanced/ui_state(mob/user) + return GLOB.not_incapacitated_and_adjacent_strict_state + +/obj/item/device/helmet_visor/medical/advanced/ui_data(mob/user) + var/list/data = list( + "published_documents" = chemical_data.research_publications, + "terminal_view" = FALSE + ) + return data + +/obj/item/device/helmet_visor/medical/advanced/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "PublishedDocsHud", name) + ui.open() + +/obj/item/device/helmet_visor/medical/advanced/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + if(!ishuman(ui.user)) + return + + var/mob/living/carbon/human/user = ui.user + + if(user.stat || user.is_mob_restrained() || !in_range(src, user)) + return + + switch(action) + if ("read_document") + var/print_type = params["print_type"] + var/print_title = params["print_title"] + var/obj/item/paper/research_report/report = chemical_data.get_report(print_type, print_title) + if(report) + report.read_paper(user) + return + +/datum/action/item_action/view_publications/helmet_visor/action_activate() + var/obj/item/device/helmet_visor/medical/advanced/medical_visor = locate() in holder_item + + if(!medical_visor) + return + + medical_visor.tgui_interact(owner) + /obj/item/device/helmet_visor/security name = "security optic" icon_state = "sec_sight" @@ -71,28 +167,159 @@ action_icon_string = "blank_hud_sight_down" helmet_overlay = "weld_visor" -/obj/item/device/helmet_visor/welding_visor/visor_function(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user, silent = FALSE) - if(attached_helmet == user.head && attached_helmet.active_visor == src) - attached_helmet.vision_impair = VISION_IMPAIR_MAX - attached_helmet.flags_inventory |= COVEREYES|COVERMOUTH - attached_helmet.flags_inv_hide |= HIDEEYES|HIDEFACE - attached_helmet.eye_protection = EYE_PROTECTION_WELDING - user.update_tint() - if(!silent) - to_chat(user, SPAN_NOTICE("You activate [src] on [attached_helmet].")) - return TRUE +/obj/item/device/helmet_visor/welding_visor/activate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + attached_helmet.vision_impair = VISION_IMPAIR_MAX + attached_helmet.flags_inventory |= COVEREYES|COVERMOUTH + attached_helmet.flags_inv_hide |= HIDEEYES|HIDEFACE + attached_helmet.eye_protection = EYE_PROTECTION_WELDING + user.update_tint() +/obj/item/device/helmet_visor/welding_visor/deactivate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) attached_helmet.vision_impair = VISION_IMPAIR_NONE attached_helmet.flags_inventory &= ~(COVEREYES|COVERMOUTH) attached_helmet.flags_inv_hide &= ~(HIDEEYES|HIDEFACE) attached_helmet.eye_protection = EYE_PROTECTION_NONE - if(!silent) - to_chat(user, SPAN_NOTICE("You deactivate [src] on [attached_helmet].")) user.update_tint() - return TRUE /obj/item/device/helmet_visor/welding_visor/mercenary helmet_overlay = "" /obj/item/device/helmet_visor/welding_visor/tanker helmet_overlay = "tanker_weld_visor" + +#define NVG_VISOR_USAGE(delta_time) (power_cell.use(power_use * (delta_time ? delta_time : 1))) + +/obj/item/device/helmet_visor/night_vision + name = "night vision optic" + desc = "An insertable visor HUD into a standard USCM helmet. This type gives a form of night vision and is standard issue in units with regular funding." + icon_state = "nvg_sight" + hud_type = null + action_icon_string = "nvg_sight_down" + helmet_overlay = "nvg_sight_right" + toggle_on_sound = 'sound/handling/toggle_nv1.ogg' + toggle_off_sound = 'sound/handling/toggle_nv2.ogg' + + /// The internal battery for the visor + var/obj/item/cell/high/power_cell + + /// About 5 minutes active use charge (hypothetically) + var/power_use = 33 + + /// The alpha of darkness we set to for the mob while the visor is on, not completely fullbright but see-able + var/lighting_alpha = 100 + + /// A slight glowing green light while the NVG is activated, is initialized as in the attached_helmet's contents + var/atom/movable/nvg_light/on_light + + /// Whether or not the sight uses on_light and produces light + var/visor_glows = TRUE + +/obj/item/device/helmet_visor/night_vision/Initialize(mapload, ...) + . = ..() + power_cell = new(src) + +/obj/item/device/helmet_visor/night_vision/Destroy() + power_cell = null + . = ..() + +/obj/item/device/helmet_visor/night_vision/get_examine_text(mob/user) + . = ..() + + . += SPAN_NOTICE("It is currently at [round((power_cell.charge / power_cell.maxcharge) * 100)]% charge.") + +/obj/item/device/helmet_visor/night_vision/activate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + RegisterSignal(user, COMSIG_HUMAN_POST_UPDATE_SIGHT, PROC_REF(on_update_sight)) + + user.add_client_color_matrix("nvg_visor", 99, color_matrix_multiply(color_matrix_saturation(0), color_matrix_from_string("#7aff7a"))) + user.overlay_fullscreen("nvg_visor", /atom/movable/screen/fullscreen/flash/noise/nvg) + user.overlay_fullscreen("nvg_visor_blur", /atom/movable/screen/fullscreen/brute/nvg, 3) + user.update_sight() + if(visor_glows) + on_light = new(attached_helmet) + on_light.set_light_on(TRUE) + START_PROCESSING(SSobj, src) + +/obj/item/device/helmet_visor/night_vision/deactivate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + user.remove_client_color_matrix("nvg_visor", 1 SECONDS) + user.clear_fullscreen("nvg_visor", 0.5 SECONDS) + user.clear_fullscreen("nvg_visor_blur", 0.5 SECONDS) + + if(visor_glows) + qdel(on_light) + UnregisterSignal(user, COMSIG_HUMAN_POST_UPDATE_SIGHT) + + user.update_sight() + STOP_PROCESSING(SSobj, src) + +/obj/item/device/helmet_visor/night_vision/process(delta_time) + if(!NVG_VISOR_USAGE(delta_time)) + + if(!istype(loc, /obj/item/clothing/head/helmet/marine)) + return PROCESS_KILL + + if(!istype(loc?.loc, /mob/living/carbon/human)) + return PROCESS_KILL + + var/obj/item/clothing/head/helmet/marine/attached_helmet = loc + var/mob/living/carbon/human/user = loc.loc + to_chat(user, SPAN_NOTICE("[src] deactivates as the battery goes out.")) + deactivate_visor(attached_helmet, user) + return PROCESS_KILL + +/obj/item/device/helmet_visor/night_vision/can_toggle(mob/living/carbon/human/user) + . = ..() + if(!.) + return + + if(!NVG_VISOR_USAGE(FALSE)) + to_chat(user, SPAN_NOTICE("Your [src] is out of power! You'll need to recharge it.")) + return FALSE + + return TRUE + +/obj/item/device/helmet_visor/night_vision/get_helmet_examine_text() + . = ..() + + . += SPAN_NOTICE(" It is currently at [round((power_cell.charge / power_cell.maxcharge) * 100)]% charge.") + +/obj/item/device/helmet_visor/night_vision/proc/on_update_sight(mob/user) + SIGNAL_HANDLER + + if(lighting_alpha < 255) + user.see_in_dark = 12 + user.lighting_alpha = lighting_alpha + user.sync_lighting_plane_alpha() + +#undef NVG_VISOR_USAGE + +/atom/movable/nvg_light + light_power = 0.5 + light_range = 1 + light_color = COLOUR_GREEN + light_system = MOVABLE_LIGHT + light_flags = LIGHT_ATTACHED + +/obj/item/device/helmet_visor/night_vision/marine_raider + name = "advanced night vision optic" + desc = "An insertable visor HUD into a standard USCM helmet. This type gives a form of night vision and is standard issue in special forces units." + hud_type = list(MOB_HUD_FACTION_USCM, MOB_HUD_MEDICAL_ADVANCED) + helmet_overlay = "nvg_sight_right_raider" + power_use = 0 + visor_glows = FALSE + +/obj/item/device/helmet_visor/night_vision/marine_raider/activate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + . = ..() + + for(var/type in hud_type) + var/datum/mob_hud/current_mob_hud = huds[type] + current_mob_hud.add_hud_to(user, attached_helmet) + +/obj/item/device/helmet_visor/night_vision/marine_raider/deactivate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) + . = ..() + + for(var/type in hud_type) + var/datum/mob_hud/current_mob_hud = huds[type] + current_mob_hud.remove_hud_from(user, attached_helmet) + +/obj/item/device/helmet_visor/night_vision/marine_raider/process(delta_time) + return PROCESS_KILL 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/handheld_distress_beacon.dm b/code/game/objects/items/handheld_distress_beacon.dm index d3f99134cd23..699c45c256b2 100644 --- a/code/game/objects/items/handheld_distress_beacon.dm +++ b/code/game/objects/items/handheld_distress_beacon.dm @@ -38,3 +38,44 @@ active = TRUE update_icon() + +/// CMB distress beacon held by CMB Marshal for signalling distress to Anchorpoint Station +/obj/item/handheld_distress_beacon_CMB + name = "\improper CMB handheld distress beacon" + desc = "An emergency beacon. This one is branded with a Colonial Marshal Bureau star and 'ANCHORPOINT STATION' is etched in stencil on the side. This device is issued to CMB Marshals and features an extended relay antenna." + icon = 'icons/obj/items/handheld_distress_beacon.dmi' + icon_state = "beacon_inactive" + w_class = SIZE_SMALL + +/// whether or not the beacon is turned on, when activated sends message to admins requesting Anchorpoint ERT and changes sprite + var/active = FALSE + +/obj/item/handheld_distress_beacon_CMB/get_examine_text(mob/user) + . = ..() + + if(active) + . += "The beacon has been activated!" + +/obj/item/handheld_distress_beacon_CMB/update_icon() + . = ..() + + if(active) + icon_state = "beacon_active" + else + icon_state = initial(icon_state) + +/obj/item/handheld_distress_beacon_CMB/attack_self(mob/user) + . = ..() + + if(active) + to_chat(user, "[src] is already active!") + return + + for(var/client/client in GLOB.admins) + if((R_ADMIN|R_MOD) & client.admin_holder.rights) + playsound_client(client,'sound/effects/sos-morse-code.ogg',10) + message_admins("[key_name(user)] has signalled CMB in distress, and requests reinforcements! [CC_MARK(user)] (
SEND MARINE QRF) (SEND CMB TEAM) (DENY) [ADMIN_JMP_USER(user)] [CC_REPLY(user)]") + to_chat(user, SPAN_NOTICE("The CMB distress beacon flashes red, indicating that the device has been activated and is transmitting.")) + + active = TRUE + update_icon() 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/fancy.dm b/code/game/objects/items/storage/fancy.dm index ea43d6b074b9..9afa0dfd1851 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -71,7 +71,7 @@ storage_slots = 5 throwforce = 2 flags_equip_slot = SLOT_WAIST - + can_hold = list(/obj/item/tool/candle) /obj/item/storage/fancy/candle_box/fill_preset_inventory() for(var/i=1; i <= storage_slots; i++) diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index a443a3b27cd0..ee274aaab32b 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -1172,23 +1172,37 @@ /obj/item/storage/pouch/tools name = "tools pouch" - desc = "It's designed to hold maintenance tools - screwdriver, wrench, cable coil, etc. It also has a hook for an entrenching tool." + desc = "It's designed to hold maintenance tools - screwdriver, wrench, cable coil, etc. It also has a hook for an entrenching tool or light replacer." storage_slots = 4 max_w_class = SIZE_MEDIUM icon_state = "tools" can_hold = list( - /obj/item/tool/wirecutters, - /obj/item/tool/shovel/etool, - /obj/item/tool/screwdriver, /obj/item/tool/crowbar, + /obj/item/tool/screwdriver, /obj/item/tool/weldingtool, - /obj/item/device/multitool, + /obj/item/tool/wirecutters, /obj/item/tool/wrench, - /obj/item/stack/cable_coil, /obj/item/tool/extinguisher/mini, /obj/item/tool/shovel/etool, + /obj/item/stack/cable_coil, + /obj/item/weapon/gun/smg/nailgun/compact, + /obj/item/cell, + /obj/item/circuitboard, + /obj/item/stock_parts, + /obj/item/device/demo_scanner, + /obj/item/device/reagent_scanner, + /obj/item/device/assembly, + /obj/item/device/multitool, + /obj/item/device/flashlight, + /obj/item/device/t_scanner, + /obj/item/device/analyzer, + /obj/item/explosive/plastic, + /obj/item/device/lightreplacer, + ) + bypass_w_limit = list( + /obj/item/tool/shovel/etool, + /obj/item/device/lightreplacer, ) - bypass_w_limit = list(/obj/item/tool/shovel/etool) /obj/item/storage/pouch/tools/tactical name = "tactical tools pouch" diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index 4361ffc8e4a9..e3fbe86c0e3b 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -104,25 +104,24 @@ return if(user.s_active) user.s_active.hide_from(user) - user.client.screen -= boxes - user.client.screen -= storage_start - user.client.screen -= storage_continue - user.client.screen -= storage_end - user.client.screen -= closer - user.client.screen -= contents - user.client.screen += closer - user.client.screen += contents + user.client.remove_from_screen(boxes) + user.client.remove_from_screen(storage_start) + user.client.remove_from_screen(storage_continue) + user.client.remove_from_screen(storage_end) + user.client.remove_from_screen(closer) + user.client.remove_from_screen(contents) + user.client.add_to_screen(closer) + user.client.add_to_screen(contents) if(storage_slots) - user.client.screen += boxes + user.client.add_to_screen(boxes) else - user.client.screen += storage_start - user.client.screen += storage_continue - user.client.screen += storage_end + user.client.add_to_screen(storage_start) + user.client.add_to_screen(storage_continue) + user.client.add_to_screen(storage_end) user.s_active = src add_to_watchers(user) - return /obj/item/storage/proc/add_to_watchers(mob/user) if(!(user in content_watchers)) @@ -137,12 +136,12 @@ ///Used to hide the storage's inventory screen. /obj/item/storage/proc/hide_from(mob/user as mob) if(user.client) - user.client.screen -= src.boxes - user.client.screen -= storage_start - user.client.screen -= storage_continue - user.client.screen -= storage_end - user.client.screen -= src.closer - user.client.screen -= src.contents + user.client.remove_from_screen(src.boxes) + user.client.remove_from_screen(storage_start) + user.client.remove_from_screen(storage_continue) + user.client.remove_from_screen(storage_end) + user.client.remove_from_screen(src.closer) + user.client.remove_from_screen(src.contents) if(user.s_active == src) user.s_active = null del_from_watchers(user) @@ -508,7 +507,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/ W.on_enter_storage(src) if(user) if (user.client && user.s_active != src) - user.client.screen -= W + user.client.remove_from_screen(W) add_fingerprint(user) if(!prevent_warning) var/visidist = W.w_class >= 3 ? 3 : 1 @@ -534,7 +533,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/ /obj/item/storage/proc/_item_removal(obj/item/W as obj, atom/new_location) for(var/mob/M in can_see_content()) if(M.client) - M.client.screen -= W + M.client.remove_from_screen(W) if(new_location) if(ismob(new_location)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm index 5772db33198d..ffd993777644 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,18 +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/suit/storage/webbing(src) - new /obj/item/clothing/suit/storage/webbing(src) + new /obj/item/clothing/under/marine/officer/boiler(src) + new /obj/item/clothing/under/marine/officer/boiler(src) new /obj/item/clothing/gloves/combat(src) new /obj/item/clothing/gloves/combat(src) @@ -100,7 +98,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/props.dm b/code/game/objects/structures/props.dm index 3e3150040cb6..bd5610487ea0 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -810,8 +810,10 @@ var/obj/item/stack/sheet/wood/fuel = attacking_item if(remaining_fuel >= initial(remaining_fuel)) to_chat(user, SPAN_NOTICE("You cannot fuel [src] further.")) + return if(!fuel.use(1)) to_chat(SPAN_NOTICE("You do not have enough [attacking_item] to fuel [src].")) + return visible_message(SPAN_NOTICE("[user] fuels [src] with [fuel].")) remaining_fuel++ @@ -1306,19 +1308,19 @@ COOLDOWN_DECLARE(damage_delay) /// list of quip emotes, taken from Working Joe var/static/list/quips = list( - /datum/emote/living/carbon/human/synthetic/working_joe/quip/alwaysknow_damaged, + /datum/emote/living/carbon/human/synthetic/working_joe/damage/alwaysknow_damaged, /datum/emote/living/carbon/human/synthetic/working_joe/quip/not_liking, /datum/emote/living/carbon/human/synthetic/working_joe/greeting/how_can_i_help, - /datum/emote/living/carbon/human/synthetic/working_joe/task_update/day_never_done, - /datum/emote/living/carbon/human/synthetic/working_joe/task_update/required_by_apollo, + /datum/emote/living/carbon/human/synthetic/working_joe/farewell/day_never_done, + /datum/emote/living/carbon/human/synthetic/working_joe/farewell/required_by_apollo, /datum/emote/living/carbon/human/synthetic/working_joe/warning/safety_breach ) /// list of voicelines to use when damaged var/static/list/damaged = list( - /datum/emote/living/carbon/human/synthetic/working_joe/warning/damage, - /datum/emote/living/carbon/human/synthetic/working_joe/warning/that_stings, - /datum/emote/living/carbon/human/synthetic/working_joe/warning/irresponsible, - /datum/emote/living/carbon/human/synthetic/working_joe/warning/this_is_futile, + /datum/emote/living/carbon/human/synthetic/working_joe/damage/damage, + /datum/emote/living/carbon/human/synthetic/working_joe/damage/that_stings, + /datum/emote/living/carbon/human/synthetic/working_joe/damage/irresponsible, + /datum/emote/living/carbon/human/synthetic/working_joe/damage/this_is_futile, /datum/emote/living/carbon/human/synthetic/working_joe/warning/hysterical, /datum/emote/living/carbon/human/synthetic/working_joe/warning/patience ) 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/game/smoothwall.dm b/code/game/smoothwall.dm index a06ed7750c26..eb81861a3b1f 100644 --- a/code/game/smoothwall.dm +++ b/code/game/smoothwall.dm @@ -170,6 +170,11 @@ setDir(NORTH) /obj/structure/window/framed/handle_icon_junction(jun_1, jun_2) + if(!icon_exists(icon, "[basestate][jun_2 ? jun_2 : jun_1]")) //Missing states for 5, 6, 7, 9, 10, 11, 13, 14, 15 for the vast majority of /obj/structure/window/framed + icon_state = "[basestate]0" + junction = 0 + return + icon_state = "[basestate][jun_2 ? jun_2 : jun_1]" //Use junction 2 if possible, junction 1 otherwise. if(jun_2) junction = jun_2 @@ -177,6 +182,11 @@ junction = jun_1 /obj/structure/window_frame/handle_icon_junction(jun_1, jun_2) + if(!icon_exists(icon, "[basestate][jun_2 ? jun_2 : jun_1]_frame")) //Missing states for 5, 6, 7, 9, 10, 11, 13, 14, 15 for the vast majority of /obj/structure/window_frame + icon_state = "[basestate]0_frame" + junction = 0 + return + icon_state = "[basestate][jun_2 ? jun_2 : jun_1]_frame" //Use junction 2 if possible, junction 1 otherwise. if(jun_2) junction = jun_2 diff --git a/code/game/turfs/light.dm b/code/game/turfs/light.dm index 219e79e93ef2..e8b7038bcb51 100644 --- a/code/game/turfs/light.dm +++ b/code/game/turfs/light.dm @@ -1,9 +1,21 @@ +#define LIGHT_FLOOR_COLOR_BLUE 0 +#define LIGHT_FLOOR_COLOR_RED 1 +#define LIGHT_FLOOR_COLOR_GREEN 2 +#define LIGHT_FLOOR_COLOR_YELLOW 3 +#define LIGHT_FLOOR_COLOR_PURPLE 4 +#define LIGHT_FLOOR_COLOR_WHITE 5 + /turf/open/floor/light name = "light floor" desc = "Beware of breakdancing on these tiles, glass shards embedded in the head is not a fun time." + icon_state = "light_on" tile_type = /obj/item/stack/tile/light var/on = TRUE - var/state = 0 + var/state = LIGHT_FLOOR_COLOR_BLUE + +/turf/open/floor/light/get_examine_text(mob/user) + . = ..() + . += "[src] is [broken ? "broken, and requires a replacement lightbulb":"[on ? "on" : "off"]"]." /turf/open/floor/light/is_light_floor() return TRUE @@ -12,22 +24,22 @@ . = ..() if(on && !broken) //manages color, I feel like this switch is a sin. switch(state) - if(0) + if(LIGHT_FLOOR_COLOR_BLUE) icon_state = "light_on" set_light(5) - if(1) + if(LIGHT_FLOOR_COLOR_RED) icon_state = "light_on-r" set_light(5) - if(2) + if(LIGHT_FLOOR_COLOR_GREEN) icon_state = "light_on-g" set_light(5) - if(3) + if(LIGHT_FLOOR_COLOR_YELLOW) icon_state = "light_on-y" set_light(5) - if(4) + if(LIGHT_FLOOR_COLOR_PURPLE) icon_state = "light_on-p" set_light(5) - if(5,-1) + if(LIGHT_FLOOR_COLOR_WHITE,-1) //change this later icon_state = "light_on-w" set_light(5) state = -1 @@ -84,3 +96,68 @@ broken = TRUE update_icon() return XENO_ATTACK_ACTION + +/turf/open/floor/light/red + icon_state = "light_on-r" + state = LIGHT_FLOOR_COLOR_RED + +/turf/open/floor/light/green + icon_state = "light_on-g" + state = LIGHT_FLOOR_COLOR_GREEN + +/turf/open/floor/light/yellow + icon_state = "light_on-y" + state = LIGHT_FLOOR_COLOR_YELLOW + +/turf/open/floor/light/purple + icon_state = "light_on-p" + state = LIGHT_FLOOR_COLOR_PURPLE + +/turf/open/floor/light/white + icon_state = "light_on-w" + state = LIGHT_FLOOR_COLOR_WHITE + +/turf/open/floor/light/off + icon_state = "light_off" + on = FALSE + +/turf/open/floor/light/off/red + state = LIGHT_FLOOR_COLOR_RED + +/turf/open/floor/light/off/green + state = LIGHT_FLOOR_COLOR_GREEN + +/turf/open/floor/light/off/yellow + state = LIGHT_FLOOR_COLOR_YELLOW + +/turf/open/floor/light/off/purple + state = LIGHT_FLOOR_COLOR_PURPLE + +/turf/open/floor/light/off/white + state = LIGHT_FLOOR_COLOR_WHITE + +/turf/open/floor/light/broken + icon_state = "light_broken" + broken = TRUE + +/turf/open/floor/light/broken/red + state = LIGHT_FLOOR_COLOR_RED + +/turf/open/floor/light/broken/green + state = LIGHT_FLOOR_COLOR_GREEN + +/turf/open/floor/light/broken/yellow + state = LIGHT_FLOOR_COLOR_YELLOW + +/turf/open/floor/light/broken/purple + state = LIGHT_FLOOR_COLOR_PURPLE + +/turf/open/floor/light/broken/white + state = LIGHT_FLOOR_COLOR_WHITE + +#undef LIGHT_FLOOR_COLOR_BLUE +#undef LIGHT_FLOOR_COLOR_RED +#undef LIGHT_FLOOR_COLOR_GREEN +#undef LIGHT_FLOOR_COLOR_YELLOW +#undef LIGHT_FLOOR_COLOR_PURPLE +#undef LIGHT_FLOOR_COLOR_WHITE diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index c88f79b43293..a4781e1a6609 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -515,7 +515,7 @@ if(H.gloves && rand(0,100) < 60) if(istype(H.gloves,/obj/item/clothing/gloves/yautja/hunter)) var/obj/item/clothing/gloves/yautja/hunter/Y = H.gloves - if(Y && istype(Y) && Y.cloaked) + if(Y && istype(Y) && HAS_TRAIT(H, TRAIT_CLOAKED)) to_chat(H, SPAN_WARNING(" Your bracers hiss and spark as they short out!")) Y.decloak(H, TRUE, DECLOAK_SUBMERGED) diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm index 2548801cc7b1..22979858ce62 100644 --- a/code/game/turfs/walls/wall_types.dm +++ b/code/game/turfs/walls/wall_types.dm @@ -1114,6 +1114,10 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) if(src in P.permutated) return + //Ineffective if someone is sitting on the wall + if(locate(/mob) in contents) + return ..() + if(!prob(chance_to_reflect)) if(P.ammo.damage_type == BRUTE) P.damage *= brute_multiplier 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/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index 79c0a03a7589..a5975bb02274 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -218,14 +218,14 @@ if(!istype(chosen_ert)) return - var/is_announcing = tgui_alert(usr, "Would you like to announce the distress beacon to the server population? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) - if(!is_announcing) + var/quiet_launch = tgui_alert(usr, "Would you like to announce the distress beacon to the server population? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) + if(!quiet_launch) qdel(chosen_ert) return - if(is_announcing == "No") - is_announcing = FALSE - if (is_announcing == "Yes") - is_announcing = TRUE + if(quiet_launch == "No") + quiet_launch = TRUE + if (quiet_launch == "Yes") + quiet_launch = FALSE var/turf/override_spawn_loc var/prompt = tgui_alert(usr, "Spawn at their assigned spawn, or at your location?", "Spawnpoint Selection", list("Spawn", "Current Location"), 0) @@ -235,7 +235,7 @@ if(prompt == "Current Location") override_spawn_loc = get_turf(usr) - chosen_ert.activate(is_announcing, override_spawn_loc) + chosen_ert.activate(quiet_launch = quiet_launch, announce = !quiet_launch, override_spawn_loc = override_spawn_loc) message_admins("[key_name_admin(usr)] admin-called a [choice == "Randomize" ? "randomized ":""]distress beacon: [chosen_ert.name]") diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm index dc6e5550503d..31f99870fe43 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() @@ -1243,7 +1243,7 @@ for(var/client/X in GLOB.admins) if((R_ADMIN|R_MOD) & X.admin_holder.rights) to_chat(X, SPAN_STAFF_IC("ADMINS/MODS: \red [src.owner] replied to [key_name(H)]'s USCM message with: \blue \")[input]\"")) - to_chat(H, SPAN_DANGER("You hear something crackle in your headset before a voice speaks, please stand by for a message from USCM:\" \blue \"[input]\"")) + to_chat(H, SPAN_DANGER("You hear something crackle in your headset before a voice speaks, please stand by for a message:\" \blue \"[input]\"")) else if(href_list["SyndicateReply"]) var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"]) @@ -1904,6 +1904,22 @@ addtimer(CALLBACK(src, PROC_REF(accept_ert), usr, locate(href_list["distress"])), 10 SECONDS) //unanswered_distress -= ref_person + if(href_list["distress_cmb"]) //CMB distress signal, activates Anchorpoint Marine QRF to assist/rescue Colonial Marshals in distress + distress_cancel = FALSE + message_admins("[key_name_admin(usr)] has opted to SEND the Anchorpoint Station Colonial Marine QRF to assist the CMB! Launching in 10 seconds... (CANCEL)") + addtimer(CALLBACK(src, PROC_REF(accept_cmb_ert), usr, locate(href_list["distress"])), 10 SECONDS) + + if(href_list["distress_cmb_alt"]) //CMB distress signal, activates a nearby CMB Patrol Team to assist/rescue Colonial Marshals in distress + distress_cancel = FALSE + message_admins("[key_name_admin(usr)] has opted to SEND a nearby CMB Patrol Team to assist the CMB! Launching in 10 seconds... (CANCEL)") + addtimer(CALLBACK(src, PROC_REF(accept_cmb_alt_ert), usr, locate(href_list["distress"])), 10 SECONDS) + + if(href_list["deny_cmb"]) // Anchorpoint-deny. The distress call is denied, citing unavailable forces + var/mob/ref_person = locate(href_list["deny_cmb"]) + to_chat(ref_person, "A voice barely crackles through the static: CMB Team, this is Anchorpoint Station. No can do, QRF currently dispatched elsewhere, relaying distress. Sorry. Good luck, out.") + log_game("[key_name_admin(usr)] has denied a distress beacon, requested by [key_name_admin(ref_person)]") + message_admins("[key_name_admin(usr)] has denied a distress beacon, requested by [key_name_admin(ref_person)]", 1) + if(href_list["distress_pmc"]) //Wey-Yu specific PMC distress signal for chem retrieval ERT distress_cancel = FALSE message_admins("[key_name_admin(usr)] has opted to SEND the distress beacon! Launching in 10 seconds... (CANCEL)") @@ -2092,6 +2108,24 @@ log_game("[key_name_admin(approver)] has sent a randomized distress beacon, requested by [key_name_admin(ref_person)]") message_admins("[key_name_admin(approver)] has sent a randomized distress beacon, requested by [key_name_admin(ref_person)]") +/// tells admins which admin has sent the Anchorpoint ERT in response to CMB distress +/datum/admins/proc/accept_cmb_ert(mob/approver, mob/ref_person) + if(distress_cancel) + return + distress_cancel = TRUE + SSticker.mode.get_specific_call("CMB - Anchorpoint Station Colonial Marine QRF (Friendly)", FALSE, FALSE) + log_game("[key_name_admin(approver)] has sent an Anchorpoint Station Colonial Marine QRF response, requested by [key_name_admin(ref_person)]") + message_admins("[key_name_admin(approver)] has sent an Anchorpoint Station Colonial Marine QRF response, requested by [key_name_admin(ref_person)]") + +/// tells admins which admin has sent the CMB ERT in response to CMB distress +/datum/admins/proc/accept_cmb_alt_ert(mob/approver, mob/ref_person) + if(distress_cancel) + return + distress_cancel = TRUE + SSticker.mode.get_specific_call("CMB - Patrol Team - Marshals in Distress (Friendly)", FALSE, FALSE) + log_game("[key_name_admin(approver)] has sent a CMB Patrol Team distress response, requested by [key_name_admin(ref_person)]") + message_admins("[key_name_admin(approver)] has sent a CMB Patrol Team distress response, requested by [key_name_admin(ref_person)]") + /datum/admins/proc/accept_pmc_ert(mob/approver, mob/ref_person) if(distress_cancel) return diff --git a/code/modules/admin/view_variables/color_matrix_editor.dm b/code/modules/admin/view_variables/color_matrix_editor.dm index 73119db62052..078d2fc61221 100644 --- a/code/modules/admin/view_variables/color_matrix_editor.dm +++ b/code/modules/admin/view_variables/color_matrix_editor.dm @@ -19,7 +19,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/color_matrix_proxy_view) /atom/movable/screen/color_matrix_proxy_view/Destroy() for (var/plane_master in plane_masters) - client?.screen -= plane_master + client?.remove_from_screen(plane_master) qdel(plane_master) client?.clear_map(assigned_map) @@ -40,7 +40,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/color_matrix_proxy_view) for (var/plane_master_type in subtypesof(/atom/movable/screen/plane_master) - /atom/movable/screen/plane_master/blackness) var/atom/movable/screen/plane_master/plane_master = new plane_master_type() plane_master.screen_loc = "[assigned_map]:CENTER" - client?.screen |= plane_master + client?.add_to_screen(plane_master) plane_masters += plane_master diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 6e652192b37c..eeab65ec031a 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -31,13 +31,13 @@ holder.player_details.post_login_callbacks += li_cb holder.show_popup_menus = FALSE create_buttons() - holder.screen += buttons + holder.add_to_screen(buttons) holder.click_intercept = src mode.enter_mode(src) /datum/buildmode/proc/quit() mode.exit_mode(src) - holder.screen -= buttons + holder.remove_from_screen(buttons) holder.click_intercept = null holder.show_popup_menus = TRUE qdel(src) @@ -53,7 +53,7 @@ /datum/buildmode/proc/post_login() // since these will get wiped upon login - holder?.screen += buttons + holder?.add_to_screen(buttons) // re-open the according switch mode switch(switch_state) if(BM_SWITCHSTATE_MODE) @@ -103,11 +103,11 @@ /datum/buildmode/proc/open_modeswitch() switch_state = BM_SWITCHSTATE_MODE - holder.screen += modeswitch_buttons + holder.add_to_screen(modeswitch_buttons) /datum/buildmode/proc/close_modeswitch() switch_state = BM_SWITCHSTATE_NONE - holder.screen -= modeswitch_buttons + holder.remove_from_screen(modeswitch_buttons) /datum/buildmode/proc/toggle_dirswitch() if(switch_state == BM_SWITCHSTATE_DIR) @@ -118,11 +118,11 @@ /datum/buildmode/proc/open_dirswitch() switch_state = BM_SWITCHSTATE_DIR - holder.screen += dirswitch_buttons + holder.add_to_screen(dirswitch_buttons) /datum/buildmode/proc/close_dirswitch() switch_state = BM_SWITCHSTATE_NONE - holder.screen -= dirswitch_buttons + holder.remove_from_screen(dirswitch_buttons) /datum/buildmode/proc/change_mode(newmode) mode.exit_mode(src) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index a7149c07d3e7..3cfb08b8dac0 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -753,7 +753,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( return FALSE var/mob/dead/observer/observer = mob - observer.ManualFollow(target) + observer.do_observe(target) /client/proc/check_timelock(list/roles, hours) var/timelock_name = "[islist(roles) ? jointext(roles, "") : roles][hours]" @@ -783,7 +783,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( if (!screen_object.clear_with_screen) continue - screen -= object + remove_from_screen(object) ///opens the particle editor UI for the in_atom object for this client /client/proc/open_particle_editor(atom/movable/in_atom) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index de50af8dd808..554ba28e417f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -77,6 +77,7 @@ var/const/MAX_SAVE_SLOTS = 10 ) var/ghost_vision_pref = GHOST_VISION_LEVEL_MID_NVG var/ghost_orbit = GHOST_ORBIT_CIRCLE + var/dual_wield_pref = DUAL_WIELD_FIRE //Synthetic specific preferences var/synthetic_name = "Undefined" @@ -238,6 +239,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) @@ -616,13 +620,12 @@ var/const/MAX_SAVE_SLOTS = 10 [toggle_prefs & TOGGLE_AUTOMATIC_PUNCTUATION ? "On" : "Off"]
" dat += "Toggle Combat Click-Drag Override: \ [toggle_prefs & TOGGLE_COMBAT_CLICKDRAG_OVERRIDE ? "On" : "Off"]
" - dat += "Toggle Alternate-Fire Dual Wielding: \ - [toggle_prefs & TOGGLE_ALTERNATING_DUAL_WIELD ? "On" : "Off"]
" dat += "Toggle Middle-Click Swap Hands: \ [toggle_prefs & TOGGLE_MIDDLE_MOUSE_SWAP_HANDS ? "On" : "Off"]
" dat += "Toggle Vendors Vending to Hands: \ [toggle_prefs & TOGGLE_VEND_ITEM_TO_HAND ? "On" : "Off"]
" dat += "Toggle Item Animations Detail Level
" + dat += "Toggle Dual Wield Functionality
" if(MENU_SPECIAL) //wart dat += "
" dat += "

ERT Settings:

" @@ -1693,6 +1696,9 @@ var/const/MAX_SAVE_SLOTS = 10 if("origin") var/choice = tgui_input_list(user, "Please choose your character's origin.", "Origin Selection", GLOB.player_origins) + var/datum/origin/picked_choice = GLOB.origins[choice] + if(tgui_alert(user, "You've selected [picked_choice.name]. [picked_choice.desc]", "Selected Origin", list("Confirm", "Cancel")) == "Cancel") + return if(choice) origin = choice diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 106da02a00b6..c6c06a123b2e 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -62,6 +62,10 @@ var/global/list/gear_datums_by_name = list() display_name = "Ballistic goggles, orange" path = /obj/item/clothing/glasses/mgoggles/orange +/datum/gear/eyewear/goggles2 + display_name = "Ballistic goggles, M1A1" + path = /obj/item/clothing/glasses/mgoggles/v2 + /datum/gear/eyewear/bimex_shades display_name = "BiMex personal shades" path = /obj/item/clothing/glasses/sunglasses/big @@ -205,6 +209,14 @@ var/global/list/gear_datums_by_name = list() display_name = "USCM beret, tan" path = /obj/item/clothing/head/beret/cm/tan +/datum/gear/headwear/uscm/beret_black + display_name = "USCM beret, black" + path = /obj/item/clothing/head/beret/cm/black + +/datum/gear/headwear/uscm/beret_white + display_name = "USCM beret, white" + path = /obj/item/clothing/head/beret/cm/white + /datum/gear/headwear/uscm/boonie_olive display_name = "USCM boonie hat, olive" path = /obj/item/clothing/head/cmcap/boonie @@ -792,7 +804,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..c885e9b73af1 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -1,5 +1,5 @@ #define SAVEFILE_VERSION_MIN 8 -#define SAVEFILE_VERSION_MAX 20 +#define SAVEFILE_VERSION_MAX 21 //handles converting savefiles to new formats //MAKE SURE YOU KEEP THIS UP TO DATE! @@ -80,6 +80,15 @@ sound_toggles |= (SOUND_ADMIN_MEME|SOUND_ADMIN_ATMOSPHERIC) S["toggles_sound"] << sound_toggles + if(savefile_version < 21) + var/pref_toggles + S["toggle_prefs"] >> pref_toggles + if(pref_toggles & TOGGLE_ALTERNATING_DUAL_WIELD) + dual_wield_pref = DUAL_WIELD_SWAP + else + dual_wield_pref = DUAL_WIELD_FIRE + S["dual_wield_pref"] << dual_wield_pref + savefile_version = SAVEFILE_VERSION_MAX return 1 @@ -125,6 +134,7 @@ S["toggles_langchat"] >> toggles_langchat S["toggles_sound"] >> toggles_sound S["toggle_prefs"] >> toggle_prefs + S["dual_wield_pref"] >> dual_wield_pref S["toggles_flashing"] >> toggles_flashing S["toggles_ert"] >> toggles_ert S["toggles_admin"] >> toggles_admin @@ -139,6 +149,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 @@ -209,6 +220,7 @@ toggles_langchat = sanitize_integer(toggles_langchat, 0, SHORT_REAL_LIMIT, initial(toggles_langchat)) toggles_sound = sanitize_integer(toggles_sound, 0, SHORT_REAL_LIMIT, initial(toggles_sound)) toggle_prefs = sanitize_integer(toggle_prefs, 0, SHORT_REAL_LIMIT, initial(toggle_prefs)) + dual_wield_pref = sanitize_integer(dual_wield_pref, 0, 2, initial(dual_wield_pref)) toggles_flashing= sanitize_integer(toggles_flashing, 0, SHORT_REAL_LIMIT, initial(toggles_flashing)) toggles_ert = sanitize_integer(toggles_ert, 0, SHORT_REAL_LIMIT, initial(toggles_ert)) toggles_admin = sanitize_integer(toggles_admin, 0, SHORT_REAL_LIMIT, initial(toggles_admin)) @@ -219,6 +231,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) @@ -315,6 +328,7 @@ S["toggles_langchat"] << toggles_langchat S["toggles_sound"] << toggles_sound S["toggle_prefs"] << toggle_prefs + S["dual_wield_pref"] << dual_wield_pref S["toggles_flashing"] << toggles_flashing S["toggles_ert"] << toggles_ert S["toggles_admin"] << toggles_admin @@ -322,6 +336,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/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index b600b39a0018..6f9026a437dd 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -372,12 +372,21 @@ to_chat(src,SPAN_BOLDNOTICE( "Click-dragging now blocks clicks from going through.")) prefs.save_preferences() -/client/proc/toggle_dualwield() //Toggle whether dual-wielding fires both guns at once or swaps between them. - prefs.toggle_prefs ^= TOGGLE_ALTERNATING_DUAL_WIELD - if(prefs.toggle_prefs & TOGGLE_ALTERNATING_DUAL_WIELD) - to_chat(src, SPAN_BOLDNOTICE("Dual-wielding now switches between guns, as long as the other gun is loaded.")) +///Toggle whether dual-wielding fires both guns at once or swaps between them. +/client/proc/toggle_dualwield() + if(prefs.dual_wield_pref < DUAL_WIELD_NONE) + prefs.dual_wield_pref++ else - to_chat(src, SPAN_BOLDNOTICE("Dual-wielding now fires both guns simultaneously.")) + prefs.dual_wield_pref = DUAL_WIELD_FIRE + + switch(prefs.dual_wield_pref) + if(DUAL_WIELD_FIRE) + to_chat(src, SPAN_BOLDNOTICE("Dual-wielding now fires both guns simultaneously.")) + if(DUAL_WIELD_SWAP) + to_chat(src, SPAN_BOLDNOTICE("Dual-wielding now switches between guns, as long as the other gun is loaded.")) + if(DUAL_WIELD_NONE) + to_chat(src, SPAN_BOLDNOTICE("Dual-wielding now has no effect on how you fire.")) + prefs.save_preferences() /client/proc/toggle_middle_mouse_swap_hands() //Toggle whether middle click swaps your hands diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index b31e6281dba1..a6462b7a9214 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -142,7 +142,7 @@ /obj/item/clothing/glasses/science/prescription name = "prescription reagent scanner HUD goggles" - desc = "These goggles are probably of use to someone who isn't holding a rifle and actively seeking to lower their combat life expectancy. Contains prescription lenses." + desc = "These goggles are probably of use to someone who isn't holding a rifle and actively seeking to lower their combat life expectancy. Contains prescription lenses." prescription = TRUE /obj/item/clothing/glasses/science/get_examine_text(mob/user) @@ -411,6 +411,13 @@ active_icon_state = "mgogglesorg_down" inactive_icon_state = "mgogglesorg" +/obj/item/clothing/glasses/mgoggles/v2 + name = "M1A1 marine ballistic goggles" + desc = "Newer issue USCM goggles. While commonly found mounted atop M10 pattern helmets, they are also capable of preventing insects, dust, and other things from getting into one's eyes. This version has larger lenses." + icon_state = "mgoggles2" + active_icon_state = "mgoggles2_down" + inactive_icon_state = "mgoggles2" + /obj/item/clothing/glasses/mgoggles/on_enter_storage(obj/item/storage/internal/S) ..() 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/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 9d18c44affe8..e6c8391ac0a1 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -46,7 +46,7 @@ icon_state = "latex" item_state = "lgloves" siemens_coefficient = 0.30 - permeability_coefficient = 0.01 + permeability_coefficient = 0.35 /obj/item/clothing/gloves/botanic_leather desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." diff --git a/code/modules/clothing/head/head.dm b/code/modules/clothing/head/head.dm index 24e1d0231c85..f16b6ff42c9d 100644 --- a/code/modules/clothing/head/head.dm +++ b/code/modules/clothing/head/head.dm @@ -75,6 +75,12 @@ /obj/item/clothing/head/beret/cm/red icon_state = "beretred" +/obj/item/clothing/head/beret/cm/white + icon_state = "s_beret" + +/obj/item/clothing/head/beret/cm/black + icon_state = "beret_black" + /obj/item/clothing/head/beret/cm/squadberet name = "USCM Squad Beret" desc = "For those who want to show pride and have nothing to lose (in their head, at least)." @@ -236,6 +242,7 @@ /obj/item/clothing/glasses/mgoggles/prescription = HAT_GARB_RELAY_ICON_STATE, /obj/item/clothing/glasses/mgoggles/black = HAT_GARB_RELAY_ICON_STATE, /obj/item/clothing/glasses/mgoggles/orange = HAT_GARB_RELAY_ICON_STATE, + /obj/item/clothing/glasses/mgoggles/v2 = HAT_GARB_RELAY_ICON_STATE, /obj/item/prop/helmetgarb/helmet_nvg = HAT_GARB_RELAY_ICON_STATE, /obj/item/prop/helmetgarb/helmet_nvg/cosmetic = HAT_GARB_RELAY_ICON_STATE, /obj/item/prop/helmetgarb/helmet_nvg/marsoc = HAT_GARB_RELAY_ICON_STATE, @@ -370,17 +377,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 +507,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 +757,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 dda517cf1f9f..da0f58088858 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -246,6 +246,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( // EYEWEAR /obj/item/clothing/glasses/mgoggles = HELMET_GARB_RELAY_ICON_STATE, + /obj/item/clothing/glasses/mgoggles/v2 = HELMET_GARB_RELAY_ICON_STATE, /obj/item/clothing/glasses/mgoggles/prescription = HELMET_GARB_RELAY_ICON_STATE, /obj/item/clothing/glasses/mgoggles/black = HELMET_GARB_RELAY_ICON_STATE, /obj/item/clothing/glasses/mgoggles/orange = HELMET_GARB_RELAY_ICON_STATE, @@ -416,9 +417,11 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( camera = new /obj/structure/machinery/camera(src) camera.network = list(CAMERA_NET_OVERWATCH) + for(var/obj/visor as anything in built_in_visors) + visor.forceMove(src) + if(length(inserted_visors) || length(built_in_visors)) var/datum/action/item_action/cycle_helmet_huds/new_action = new(src) - LAZYADD(actions, new_action) if(ishuman(loc)) var/mob/living/carbon/human/holding_human = loc if(holding_human.head == src) @@ -439,6 +442,12 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( helmet_overlays = null QDEL_NULL(camera) QDEL_NULL(pockets) + if(active_visor && istype(loc, /mob/living/carbon/human)) + var/mob/living/carbon/human/potential_user = loc + if(potential_user.head == src) + var/obj/item/device/helmet_visor/temp_visor_holder = active_visor + active_visor = null + toggle_visor(potential_user, temp_visor_holder, TRUE) return ..() /obj/item/clothing/head/helmet/marine/attack_hand(mob/user) @@ -494,21 +503,22 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( return if(HAS_TRAIT(attacking_item, TRAIT_TOOL_SCREWDRIVER) && length(inserted_visors)) + if(active_visor) + var/obj/item/device/helmet_visor/temp_visor_holder = active_visor + active_visor = null + toggle_visor(user, temp_visor_holder, TRUE) + for(var/obj/item/device/helmet_visor/visor as anything in inserted_visors) visor.forceMove(get_turf(src)) inserted_visors = list() to_chat(user, SPAN_NOTICE("You remove the inserted visors.")) - var/obj/item/device/helmet_visor/temp_visor_holder = active_visor - active_visor = null - turn_off_visor(user, temp_visor_holder, TRUE) var/datum/action/item_action/cycle_helmet_huds/cycle_action = locate() in actions cycle_action.set_default_overlay() if(!length(built_in_visors)) cycle_action.remove_from(user) - recalculate_visors(user) return ..() @@ -589,6 +599,11 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( /obj/item/clothing/head/helmet/marine/has_garb_overlay() return flags_marine_helmet & HELMET_GARB_OVERLAY +/obj/item/clothing/head/helmet/marine/get_examine_text(mob/user) + . = ..() + if(active_visor) + . += active_visor.get_helmet_examine_text() + /obj/item/clothing/head/helmet/marine/proc/add_hugger_damage() //This is called in XenoFacehuggers.dm to first add the overlay and set the var. if(flags_marine_helmet & HELMET_DAMAGE_OVERLAY && !(flags_marine_helmet & HELMET_IS_DAMAGED)) helmet_overlays["damage"] = image('icons/obj/items/clothing/cm_hats.dmi',icon_state = "hugger_damage") @@ -615,29 +630,17 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( if(!human_user || human_user.head != src) return - turn_on_visor(human_user) - -/// Turns on the current active visor -/obj/item/clothing/head/helmet/marine/proc/turn_on_visor(mob/user) - if(!active_visor) - return - - if(active_visor.can_toggle(user)) - active_visor.visor_function(src, user) + toggle_visor(user, silent = TRUE) - playsound_client(user.client, active_visor.toggle_on_sound, null, 75) - update_icon() +/// Toggles the specified visor, if nothing specified then the active visor, if the visor is the active visor and the helmet is on the user's head it will turn on, if it is not the active visor it will turn off +/obj/item/clothing/head/helmet/marine/proc/toggle_visor(mob/user, obj/item/device/helmet_visor/current_visor, silent = FALSE) + current_visor = current_visor || active_visor -/// Turns off the specified visor -/obj/item/clothing/head/helmet/marine/proc/turn_off_visor(mob/user, obj/item/device/helmet_visor/current_visor, sound = FALSE) if(!current_visor) return - if(current_visor.can_toggle(user)) - current_visor.visor_function(src, user) + current_visor.toggle_visor(src, user, silent) - if(sound) - playsound_client(user.client, current_visor.toggle_off_sound, null, 75) update_icon() /// Attempts to turn off all visors @@ -645,8 +648,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( var/list/total_visors = built_in_visors + inserted_visors for(var/obj/item/device/helmet_visor/cycled_helmet_visor in total_visors) - if(cycled_helmet_visor.can_toggle(user)) - cycled_helmet_visor.visor_function(src, user, TRUE) + cycled_helmet_visor.deactivate_visor(src, user) update_icon() @@ -662,20 +664,19 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( for(var/hud_type in total_visors) if(hud_type == active_visor) if(length(total_visors) > iterator) - turn_off_visor(user, active_visor, FALSE) active_visor = total_visors[(iterator + 1)] - recalculate_visors(user) + toggle_visor(user, total_visors[iterator], TRUE) + toggle_visor(user) return active_visor else - turn_off_visor(user, active_visor, TRUE) active_visor = null - recalculate_visors(user) + toggle_visor(user, total_visors[iterator], FALSE) return FALSE iterator++ if(total_visors[1]) active_visor = total_visors[1] - recalculate_visors(user) + toggle_visor(user) return active_visor active_visor = null @@ -724,6 +725,21 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( item_state = "c_helmet" flags_atom = NO_SNOW_TYPE +/obj/item/clothing/head/helmet/marine/jungle + icon_state = "helmet" + item_state = "helmet" + flags_atom = NO_SNOW_TYPE + +/obj/item/clothing/head/helmet/marine/snow + icon_state = "s_helmet" + item_state = "s_helmet" + flags_atom = NO_SNOW_TYPE + +/obj/item/clothing/head/helmet/marine/desert + icon_state = "d_helmet" + item_state = "d_helmet" + flags_atom = NO_SNOW_TYPE + /obj/item/clothing/head/helmet/marine/tech/tanker name = "\improper M50 tanker helmet" desc = "The lightweight M50 tanker helmet is designed for use by armored crewmen in the USCM. It offers low weight protection, and allows agile movement inside the confines of an armored vehicle. Features a toggleable welding screen for eye protection." @@ -929,8 +945,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( armor_bio = CLOTHING_ARMOR_MEDIUMHIGH specialty = "M10 pattern SOF" flags_atom = NO_SNOW_TYPE - built_in_visors = list(new /obj/item/device/helmet_visor, new /obj/item/device/helmet_visor/medical, new /obj/item/device/helmet_visor/security) - + built_in_visors = list(new /obj/item/device/helmet_visor/night_vision/marine_raider, new /obj/item/device/helmet_visor/security) + start_down_visor_type = /obj/item/device/helmet_visor/night_vision/marine_raider //=============================//PMCS\\==================================\\ //=======================================================================\\ diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index d4b1d6f3dd84..b13fab0ae5a4 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -11,7 +11,7 @@ w_class = SIZE_SMALL item_state = "gas_alt" gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 + permeability_coefficient = 0.9 armor_melee = CLOTHING_ARMOR_NONE armor_bullet = CLOTHING_ARMOR_NONE armor_laser = CLOTHING_ARMOR_NONE diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 0d4572c7297f..c39e6a620833 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -17,7 +17,7 @@ flags_inventory = COVERMOUTH flags_armor_protection = 0 gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.01 + permeability_coefficient = 0.3 armor_melee = CLOTHING_ARMOR_NONE armor_bullet = CLOTHING_ARMOR_NONE armor_laser = CLOTHING_ARMOR_NONE 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/bio.dm b/code/modules/clothing/suits/bio.dm index 963e4efa3ae6..59e0918550ed 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -3,7 +3,7 @@ name = "bio hood" icon_state = "bio" desc = "A hood that protects the head and face from biological contaminants." - permeability_coefficient = 0.01 + permeability_coefficient = 0.2 armor_melee = CLOTHING_ARMOR_NONE armor_bullet = CLOTHING_ARMOR_NONE armor_laser = CLOTHING_ARMOR_NONE @@ -30,7 +30,7 @@ item_state = "bio_suit" w_class = SIZE_LARGE//bulky item gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 + permeability_coefficient = 0.2 flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_LEGS|BODY_FLAG_FEET|BODY_FLAG_ARMS|BODY_FLAG_HANDS slowdown = 1 armor_melee = CLOTHING_ARMOR_NONE diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 5dbcf5b7cf81..a28a143f4ff0 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -61,6 +61,7 @@ /obj/item/attachable/bayonet, /obj/item/storage/backpack/general_belt, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/storage/belt/gun/m4a3, /obj/item/storage/belt/gun/m44, /obj/item/storage/belt/gun/smartpistol, @@ -201,6 +202,7 @@ /obj/item/tool/crew_monitor, /obj/item/tool/pen, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/device/motiondetector, ) armor_melee = CLOTHING_ARMOR_MEDIUMLOW @@ -260,6 +262,7 @@ /obj/item/tool/crew_monitor, /obj/item/tool/pen, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/device/motiondetector, ) armor_melee = CLOTHING_ARMOR_MEDIUMLOW @@ -323,6 +326,7 @@ /obj/item/tool/crew_monitor, /obj/item/tool/pen, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/device/motiondetector, ) flags_armor_protection = BODY_FLAG_CHEST @@ -409,6 +413,12 @@ /obj/item/device/binoculars, /obj/item/attachable/bayonet, + /obj/item/storage/belt/gun/m4a3, + /obj/item/storage/belt/gun/m44, + /obj/item/storage/belt/gun/mateba, + /obj/item/storage/belt/gun/smartpistol, + /obj/item/weapon/gun, + /obj/item/device/flashlight, /obj/item/device/healthanalyzer, /obj/item/device/radio, @@ -417,6 +427,7 @@ /obj/item/tool/crew_monitor, /obj/item/tool/pen, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/device/motiondetector, ) flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_ARMS diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index 7ccafcd8b550..e375502f5435 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") @@ -537,10 +537,26 @@ time_to_equip = 1 SECONDS uniform_restricted = null -/obj/item/clothing/suit/storage/marine/light/synvest/vanilla +/obj/item/clothing/suit/storage/marine/light/synvest/grey icon_state = "VL_syn" flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE +/obj/item/clothing/suit/storage/marine/light/synvest/jungle + icon_state = "VL_syn_camo" + flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE + +/obj/item/clothing/suit/storage/marine/light/synvest/snow + icon_state = "s_VL_syn_camo" + flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE + +/obj/item/clothing/suit/storage/marine/light/synvest/desert + icon_state = "d_VL_syn_camo" + flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE + +/obj/item/clothing/suit/storage/marine/light/synvest/dgrey + icon_state = "c_VL_syn_camo" + flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE + /obj/item/clothing/suit/storage/marine/heavy name = "\improper M3-EOD pattern heavy armor" desc = "A heavier version of the standard M3 pattern armor, the armor is primarily designed to withstand ballistic, explosive, and internal damage, with the drawback of increased bulk and thus reduced movement speed, alongside little additional protection from standard blunt force impacts and biological threats." @@ -1033,9 +1049,13 @@ /obj/item/tool/lighter, /obj/item/explosive/grenade, /obj/item/storage/bible, + /obj/item/tool/crowbar, + /obj/item/storage/large_holster/katana, + /obj/item/storage/large_holster/machete, /obj/item/weapon/claymore/mercsword/machete, /obj/item/attachable/bayonet, /obj/item/device/motiondetector, + /obj/item/tool/crew_monitor, /obj/item/device/walkman, ) uniform_restricted = list(/obj/item/clothing/under/marine/veteran/pmc) @@ -1490,7 +1510,12 @@ /obj/item/tool/crowbar, /obj/item/tool/crew_monitor, /obj/item/tool/pen, + /obj/item/storage/belt/gun/m4a3, + /obj/item/storage/belt/gun/m44, + /obj/item/storage/belt/gun/mateba, + /obj/item/storage/belt/gun/smartpistol, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/device/motiondetector, /obj/item/device/walkman, ) 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/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index c51f5f2575ed..2a3cff05ee1e 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -282,6 +282,12 @@ /obj/item/device/binoculars, /obj/item/attachable/bayonet, + /obj/item/storage/belt/gun/m4a3, + /obj/item/storage/belt/gun/m44, + /obj/item/storage/belt/gun/mateba, + /obj/item/storage/belt/gun/smartpistol, + /obj/item/weapon/gun, + /obj/item/device/flashlight, /obj/item/device/healthanalyzer, /obj/item/device/radio, @@ -289,6 +295,7 @@ /obj/item/tool/crew_monitor, /obj/item/tool/pen, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/device/motiondetector, ) @@ -303,12 +310,19 @@ /obj/item/device/binoculars, /obj/item/attachable/bayonet, + /obj/item/storage/belt/gun/m4a3, + /obj/item/storage/belt/gun/m44, + /obj/item/storage/belt/gun/mateba, + /obj/item/storage/belt/gun/smartpistol, + /obj/item/weapon/gun, + /obj/item/device/flashlight, /obj/item/device/healthanalyzer, /obj/item/device/radio, /obj/item/tool/crowbar, /obj/item/tool/crew_monitor, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/device/motiondetector, ) @@ -433,6 +447,11 @@ /obj/item/device/binoculars, /obj/item/attachable/bayonet, + /obj/item/storage/belt/gun/m4a3, + /obj/item/storage/belt/gun/m44, + /obj/item/storage/belt/gun/mateba, + /obj/item/storage/belt/gun/smartpistol, + /obj/item/weapon/gun, /obj/item/device/flashlight, /obj/item/device/healthanalyzer, @@ -442,6 +461,7 @@ /obj/item/tool/crew_monitor, /obj/item/tool/pen, /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, /obj/item/device/motiondetector, ) min_cold_protection_temperature = T0C diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index fb9d889b4584..d9d8d7da45b7 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -62,6 +62,14 @@ worn_state = "marine_engineer" specialty = "USCM Combat Technician" +/obj/item/clothing/under/marine/engineer/standard + flags_atom = NO_SNOW_TYPE + +/obj/item/clothing/under/marine/engineer/darker + icon_state = "d_marine_engineer" + worn_state = "d_marine_engineer" + flags_atom = NO_SNOW_TYPE + /obj/item/clothing/under/marine/rto name = "\improper USCM radio telephone operator uniform" desc = "Standard-issue RTO fatigues. They have shards of light Kevlar to help protect against stabbing weapons and bullets." @@ -105,6 +113,14 @@ flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE|UNIFORM_SLEEVE_CUTTABLE|UNIFORM_JACKET_REMOVABLE specialty = "military police" +/obj/item/clothing/under/marine/mp/standard + flags_atom = NO_SNOW_TYPE + +/obj/item/clothing/under/marine/mp/darker + icon_state = "d_MP_jumpsuit" + worn_state = "d_MP_jumpsuit" + flags_atom = NO_SNOW_TYPE + /obj/item/clothing/under/marine/warden name = "military warden jumpsuit" desc = "Standard-issue Military Warden uniform. It has shards of light Kevlar to help protect against stabbing weapons and bullets." @@ -196,17 +212,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 +308,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/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index cf54fa9f01a7..24eec4f1e3a8 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -381,6 +381,22 @@ inv_overlay = image("icon" = 'icons/obj/items/clothing/ties_overlay.dmi', "icon_state" = "[icon_state]") update_icon() +/obj/item/clothing/accessory/poncho/green + icon_state = "poncho" + +/obj/item/clothing/accessory/poncho/brown + icon_state = "d_poncho" + +/obj/item/clothing/accessory/poncho/black + icon_state = "u_poncho" + +/obj/item/clothing/accessory/poncho/blue + icon_state = "c_poncho" + +/obj/item/clothing/accessory/poncho/purple + icon_state = "s_poncho" + + //Ties that can store stuff /obj/item/storage/internal/accessory @@ -598,6 +614,30 @@ /obj/item/clothing/accessory/storage/surg_vest/blue/equipped hold = /obj/item/storage/internal/accessory/surg_vest/equipped +/obj/item/clothing/accessory/storage/surg_vest/drop_blue + name = "blue surgical drop pouch" + desc = "A matte blue synthcotton drop pouch purpose-made for holding surgical tools." + icon_state = "drop_pouch_surgical_blue" + +/obj/item/clothing/accessory/storage/surg_vest/drop_blue/equipped + hold = /obj/item/storage/internal/accessory/surg_vest/equipped + +/obj/item/clothing/accessory/storage/surg_vest/drop_green + name = "green surgical drop pouch" + desc = "A greenish synthcotton drop pouch purpose-made for holding surgical tools." + icon_state = "drop_pouch_surgical_green" + +/obj/item/clothing/accessory/storage/surg_vest/drop_green/equipped + hold = /obj/item/storage/internal/accessory/surg_vest/equipped + +/obj/item/clothing/accessory/storage/surg_vest/drop_black + name = "black surgical drop pouch" + desc = "A tactical black synthcotton drop pouch purpose-made for holding surgical tools." + icon_state = "drop_pouch_surgical_black" + +/obj/item/clothing/accessory/storage/surg_vest/drop_black/equipped + hold = /obj/item/storage/internal/accessory/surg_vest/equipped + /obj/item/clothing/accessory/storage/knifeharness name = "M272 pattern knife vest" desc = "An older generation M272 pattern knife vest once employed by the USCM. Can hold up to 5 knives. It is made of synthcotton." diff --git a/code/modules/cm_aliens/structures/egg.dm b/code/modules/cm_aliens/structures/egg.dm index a0e8e5054d45..c23f4f3e2b20 100644 --- a/code/modules/cm_aliens/structures/egg.dm +++ b/code/modules/cm_aliens/structures/egg.dm @@ -208,16 +208,13 @@ return user.animation_attack_on(src) - if(W.attack_verb.len) + if(length(W.attack_verb)) visible_message(SPAN_DANGER("\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]")) else visible_message(SPAN_DANGER("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]")) var/damage = W.force - if(W.w_class < SIZE_LARGE || !W.sharp || W.force < 20) //only big strong sharp weapon are adequate - damage /= 4 if(iswelder(W)) var/obj/item/tool/weldingtool/WT = W - if(WT.remove_fuel(0, user)) damage = 15 playsound(src.loc, 'sound/items/Welder.ogg', 25, 1) diff --git a/code/modules/cm_aliens/structures/fruit.dm b/code/modules/cm_aliens/structures/fruit.dm index e54cb9417d7c..318bc6ba6cf2 100644 --- a/code/modules/cm_aliens/structures/fruit.dm +++ b/code/modules/cm_aliens/structures/fruit.dm @@ -438,7 +438,7 @@ return XENO_NONCOMBAT_ACTION /obj/item/reagent_container/food/snacks/resin_fruit/proc/add_juice() - reagents.add_reagent("fruit_resin", 8) + reagents.add_reagent("fruit_resin", 30) /obj/effect/alien/resin/fruit/MouseDrop(atom/over_object) var/mob/living/carbon/xenomorph/X = over_object @@ -491,7 +491,7 @@ fruit_type = /obj/effect/alien/resin/fruit/greater /obj/item/reagent_container/food/snacks/resin_fruit/greater/add_juice() - reagents.add_reagent("fruit_resin", 16) + reagents.add_reagent("fruit_resin", 60) /obj/item/reagent_container/food/snacks/resin_fruit/unstable name = XENO_FRUIT_UNSTABLE @@ -501,8 +501,8 @@ fruit_type = /obj/effect/alien/resin/fruit/unstable /obj/item/reagent_container/food/snacks/resin_fruit/unstable/add_juice() - reagents.add_reagent("fruit_resin", 4) - reagents.add_reagent(PLASMA_CHITIN, 12) + reagents.add_reagent("fruit_resin", 30) + reagents.add_reagent(PLASMA_CHITIN, 30) /obj/item/reagent_container/food/snacks/resin_fruit/spore name = XENO_FRUIT_SPORE @@ -511,8 +511,8 @@ fruit_type = /obj/effect/alien/resin/fruit/spore /obj/item/reagent_container/food/snacks/resin_fruit/spore/add_juice() - reagents.add_reagent("fruit_resin", 4) - reagents.add_reagent(PLASMA_PHEROMONE, 12) + reagents.add_reagent("fruit_resin", 30) + reagents.add_reagent(PLASMA_PHEROMONE, 30) /obj/item/reagent_container/food/snacks/resin_fruit/speed name = XENO_FRUIT_SPEED @@ -521,8 +521,8 @@ fruit_type = /obj/effect/alien/resin/fruit/speed /obj/item/reagent_container/food/snacks/resin_fruit/speed/add_juice() - reagents.add_reagent("fruit_resin", 4) - reagents.add_reagent(PLASMA_PHEROMONE, 12) + reagents.add_reagent("fruit_resin", 30) + reagents.add_reagent(PLASMA_CATECHOLAMINE, 30) /obj/item/reagent_container/food/snacks/resin_fruit/plasma name = XENO_FRUIT_PLASMA @@ -530,5 +530,5 @@ fruit_type = /obj/effect/alien/resin/fruit/plasma /obj/item/reagent_container/food/snacks/resin_fruit/plasma/add_juice() - reagents.add_reagent("fruit_resin", 4) - reagents.add_reagent(PLASMA_PURPLE, 12) + reagents.add_reagent("fruit_resin", 30) + reagents.add_reagent(PLASMA_PURPLE, 30) diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index c24c34de099c..96ded23c8ac7 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -164,7 +164,7 @@ /// Checks if all comms towers are connected and then starts end game content on all pylons if they are /obj/effect/alien/resin/special/pylon/endgame/proc/comms_relay_connection() - marine_announcement("ALERT.\n\nIrregular build up of energy around communication relays at [get_area(src)].", "[MAIN_AI_SYSTEM] Biological Scanner") + marine_announcement("ALERT.\n\nIrregular build up of energy around communication relays at [get_area(src)], biological hazard detected.\n\nDANGER: Hazard is generating new xenomorph entities, advise urgent termination of hazard by ground forces.", "[MAIN_AI_SYSTEM] Biological Scanner") for(var/hivenumber in GLOB.hive_datum) var/datum/hive_status/checked_hive = GLOB.hive_datum[hivenumber] @@ -172,7 +172,7 @@ continue if(checked_hive == linked_hive) - xeno_announcement(SPAN_XENOANNOUNCE("We have harnessed the tall's communication relay at [get_area(src)]. Hold it!"), hivenumber, XENO_GENERAL_ANNOUNCE) + xeno_announcement(SPAN_XENOANNOUNCE("We have harnessed the tall's communication relay at [get_area(src)].\n\nWe will now grow more of our number from this pylon. Hold it!"), hivenumber, XENO_GENERAL_ANNOUNCE) else xeno_announcement(SPAN_XENOANNOUNCE("Another hive has harnessed the tall's communication relay at [get_area(src)].[linked_hive.faction_is_ally(checked_hive.name) ? "" : " Stop them!"]"), hivenumber, XENO_GENERAL_ANNOUNCE) @@ -196,10 +196,12 @@ if(!xeno.counts_for_slots) hive_xenos -= xeno - if(length(hive_xenos) > (length(GLOB.alive_human_list) * ENDGAME_LARVA_CAP_MULTIPLIER)) + var/real_total_xeno_count = length(hive_xenos) + linked_hive.stored_larva + + if(real_total_xeno_count > (length(GLOB.alive_human_list) * ENDGAME_LARVA_CAP_MULTIPLIER)) return - linked_hive.partial_larva += length(hive_xenos) * LARVA_ADDITION_MULTIPLIER + linked_hive.partial_larva += real_total_xeno_count * LARVA_ADDITION_MULTIPLIER linked_hive.convert_partial_larva_to_full_larva() linked_hive.hive_ui.update_burrowed_larva() @@ -263,25 +265,26 @@ linked_hive.hive_ui.update_burrowed_larva() qdel(worm) + var/count_spawned = 0 var/spawning_larva = can_spawn_larva() && (last_larva_time + spawn_cooldown) < world.time if(spawning_larva) last_larva_time = world.time if(spawning_larva || (last_larva_queue_time + spawn_cooldown * 4) < world.time) last_larva_queue_time = world.time var/list/players_with_xeno_pref = get_alien_candidates(linked_hive) - if(players_with_xeno_pref && players_with_xeno_pref.len) + if(length(players_with_xeno_pref)) if(spawning_larva && spawn_burrowed_larva(players_with_xeno_pref[1])) // We were in spawning_larva mode and successfully spawned someone - message_alien_candidates(players_with_xeno_pref, dequeued = 1) - else - // Just time to update everyone their queue status (or the spawn failed) - message_alien_candidates(players_with_xeno_pref, dequeued = 0) + count_spawned = 1 + // Update everyone's queue status + message_alien_candidates(players_with_xeno_pref, dequeued = count_spawned) if(linked_hive.hijack_burrowed_surge && (last_surge_time + surge_cooldown) < world.time) last_surge_time = world.time linked_hive.stored_larva++ linked_hive.hijack_burrowed_left-- - notify_ghosts(header = "Claim Xeno", message = "The Hive has gained another burrowed larva! Click to take it.", source = src, action = NOTIFY_JOIN_XENO, enter_link = "join_xeno") + if(GLOB.xeno_queue_candidate_count < 1 + count_spawned) + notify_ghosts(header = "Claim Xeno", message = "The Hive has gained another burrowed larva! Click to take it.", source = src, action = NOTIFY_JOIN_XENO, enter_link = "join_xeno") if(surge_cooldown > 30 SECONDS) //mostly for sanity purposes surge_cooldown = surge_cooldown - surge_incremental_reduction //ramps up over time if(linked_hive.hijack_burrowed_left < 1) diff --git a/code/modules/cm_aliens/structures/special_structure.dm b/code/modules/cm_aliens/structures/special_structure.dm index 69bdcc2438ac..8378d93e1ac9 100644 --- a/code/modules/cm_aliens/structures/special_structure.dm +++ b/code/modules/cm_aliens/structures/special_structure.dm @@ -72,3 +72,9 @@ /obj/effect/alien/resin/special/attack_alien(mob/living/carbon/xenomorph/M) if(M.can_destroy_special() || M.hivenumber != linked_hive.hivenumber) return ..() + +/obj/effect/alien/resin/special/get_projectile_hit_boolean(obj/projectile/firing_projectile) + if(firing_projectile.original == src || firing_projectile.original == get_turf(src)) + return TRUE + + return FALSE diff --git a/code/modules/cm_marines/dropship_ammo.dm b/code/modules/cm_marines/dropship_ammo.dm index 264400caa0dd..ef59e643e4cf 100644 --- a/code/modules/cm_marines/dropship_ammo.dm +++ b/code/modules/cm_marines/dropship_ammo.dm @@ -18,10 +18,10 @@ var/ammo_count /// Maximal ammunition count var/max_ammo_count - /// What to call the ammo in the ammo transfering message + /// What to call the ammo in the ammo transferring message var/ammo_name = "round" var/ammo_id - /// Whether the ammo inside this magazine can be transfered to another magazine. + /// Whether the ammo inside this magazine can be transferred to another magazine. var/transferable_ammo = FALSE /// How many tiles the ammo can deviate from the laser target var/accuracy_range = 3 @@ -136,7 +136,7 @@ /obj/structure/ship_ammo/heavygun name = "\improper PGU-100 Multi-Purpose 30mm ammo crate" icon_state = "30mm_crate" - desc = "A crate full of PGU-100 30mm Multi-Purpose ammo designed to penetrate light (non reinforced) structures, as well as shred infantry, IAVs, LAVs, IMVs, and MRAPs. Works in large areas for use on Class 4 and superior alien insectoid infestations, as well as fitting within the armaments allowed for use against a tier 4 insurgency as well as higher tiers. However, it lacks armor penetrating capabilities, for which Anti-Tank 30mm ammo is needed." + desc = "A crate full of PGU-100 30mm Multi-Purpose ammo designed to penetrate light (non reinforced) structures, as well as shred infantry, IAVs, LAVs, IMVs, and MRAPs. Works in large areas for use on Class 4 and superior alien insectoid infestations, as well as fitting within the armaments allowed for use against a tier 4 insurgency as well as higher tiers. However, it lacks armor penetrating capabilities, for which Anti-Tank 30mm ammo is needed. Can be loaded into the GAU-21 30mm cannon." equipment_type = /obj/structure/dropship_equipment/weapon/heavygun ammo_count = 400 max_ammo_count = 400 @@ -146,7 +146,7 @@ fire_mission_delay = 2 var/bullet_spread_range = 4 //how far from the real impact turf can bullets land var/shrapnel_type = /datum/ammo/bullet/shrapnel/gau //For siming 30mm bullet impacts. - var/directhit_damage = 105 //how much damage is to be inficted to a mob, this is here so that we can hit resting mobs. + var/directhit_damage = 105 //how much damage is to be inflicted to a mob, this is here so that we can hit resting mobs. var/penetration = 10 //AP value pretty much /obj/structure/ship_ammo/heavygun/get_examine_text(mob/user) @@ -193,9 +193,9 @@ /obj/structure/ship_ammo/heavygun/antitank - name = "PGU-105 30mm Anti-tank ammo crate" + name = "\improper PGU-105 30mm Anti-tank ammo crate" icon_state = "30mm_crate_hv" - desc = "A crate full of PGU-105 Specialized 30mm APFSDS Titanium-Tungsten alloy penetrators, made for countering peer and near peer APCs, IFVs, and MBTs in CAS support. It's designed to penetrate up to the equivalent 1350mm of RHA when launched from a GAU-21. It is much less effective against soft targets however, in which case 30mm ball ammunition is recommended. WARNING: discarding petals from the ammunition can be harmful if the dropship does not pull out at the needed speeds. Please consult page 3574 of the manual, available for order at any ARMAT store." + desc = "A crate full of PGU-105 Specialized 30mm APFSDS Titanium-Tungsten alloy penetrators, made for countering peer and near peer APCs, IFVs, and MBTs in CAS support. It is designed to penetrate up to the equivalent 1350mm of RHA when launched from a GAU-21. It is much less effective against soft targets however, in which case 30mm ball ammunition is recommended. WARNING: discarding petals from the ammunition can be harmful if the dropship does not pull out at the needed speeds. Please consult page 3574 of the manual, available for order at any ARMAT store. Can be loaded into the GAU-21 30mm cannon." travelling_time = 60 ammo_count = 400 max_ammo_count = 400 @@ -204,15 +204,15 @@ point_cost = 325 fire_mission_delay = 2 shrapnel_type = /datum/ammo/bullet/shrapnel/gau/at - directhit_damage = 80 //how much damage is to be inficted to a mob, this is here so that we can hit resting mobs. + directhit_damage = 80 //how much damage is to be inflicted to a mob, this is here so that we can hit resting mobs. penetration = 40 //AP value pretty much //laser battery /obj/structure/ship_ammo/laser_battery - name = "high-capacity laser battery" + name = "\improper BTU-17/LW Hi-Cap Laser Battery" icon_state = "laser_battery" - desc = "A high-capacity laser battery used to power laser beam weapons." + desc = "A high-capacity laser battery used to power laser beam weapons. Can be loaded into the LWU-6B Laser Cannon." travelling_time = 10 ammo_count = 100 max_ammo_count = 100 @@ -283,8 +283,8 @@ //this one is air-to-air only /obj/structure/ship_ammo/rocket/widowmaker - name = "\improper AIM-224/B 'Widowmaker'" - desc = "The AIM-224/B missile is a retrofit of the latest in air-to-air missile technology. Earning the nickname of 'Widowmaker' from various dropship pilots after improvements to its guidance warhead prevents it from being jammed leading to its high kill rate. Not well suited for ground bombardment but its high velocity makes it reach its target quickly. This one has been modified to be a free-fall bomb as a result of dropship ammo shortages." + name = "\improper AIM-224B 'Widowmaker'" + desc = "The AIM-224B missile is a retrofit of the latest in air-to-air missile technology. Earning the nickname of 'Widowmaker' from various dropship pilots after improvements to its guidance warhead prevents it from being jammed leading to its high kill rate. Not well suited for ground bombardment but its high velocity makes it reach its target quickly. This one has been modified to be a free-fall bomb as a result of dropship ammo shortages. Can be loaded into the LAU-444 Guided Missile Launcher." icon_state = "single" travelling_time = 30 //not powerful, but reaches target fast ammo_id = "" @@ -298,7 +298,7 @@ /obj/structure/ship_ammo/rocket/banshee name = "\improper AGM-227 'Banshee'" - desc = "The AGM-227 missile is a mainstay of the overhauled dropship fleet against any mobile or armored ground targets. It's earned the nickname of 'Banshee' from the sudden wail that it emits right before hitting a target. Useful to clear out large areas." + desc = "The AGM-227 missile is a mainstay of the overhauled dropship fleet against any mobile or armored ground targets. It's earned the nickname of 'Banshee' from the sudden wail that it emits right before hitting a target. Useful to clear out large areas. Can be loaded into the LAU-444 Guided Missile Launcher." icon_state = "banshee" ammo_id = "b" point_cost = 300 @@ -312,7 +312,7 @@ /obj/structure/ship_ammo/rocket/keeper name = "\improper GBU-67 'Keeper II'" - desc = "The GBU-67 'Keeper II' is the latest in a generation of laser guided weaponry that spans all the way back to the 20th century. Earning its nickname from a shortening of 'Peacekeeper' which comes from the program that developed its guidance system and the various uses of it during peacekeeping conflicts. Its payload is designed to devastate armored targets." + desc = "The GBU-67 'Keeper II' is the latest in a generation of laser guided weaponry that spans all the way back to the 20th century. Earning its nickname from a shortening of 'Peacekeeper' which comes from the program that developed its guidance system and the various uses of it during peacekeeping conflicts. Its payload is designed to devastate armored targets. Can be loaded into the LAU-444 Guided Missile Launcher." icon_state = "paveway" travelling_time = 20 //A fast payload due to its very tight blast zone ammo_id = "k" @@ -325,8 +325,8 @@ QDEL_IN(src, 0.5 SECONDS) /obj/structure/ship_ammo/rocket/harpoon - name = "\improper AGM-84 'Harpoon'" - desc = "The AGM-84 Harpoon is an Anti-Ship Missile, designed and used to effectively take down enemy ships with a huge blast wave with low explosive power. This one is modified to use ground signals." + name = "\improper AGM-184 'Harpoon II'" + desc = "The AGM-184 Harpoon II is an Anti-Ship Missile, designed and used to effectively take down enemy ships with a huge blast wave with low explosive power. This one is modified to use ground signals. Can be loaded into the LAU-444 Guided Missile Launcher." icon_state = "harpoon" ammo_id = "s" travelling_time = 50 @@ -340,8 +340,8 @@ QDEL_IN(src, 0.5 SECONDS) /obj/structure/ship_ammo/rocket/napalm - name = "\improper XN-99 'Napalm'" - desc = "The XN-99 'Napalm' is an incendiary missile used to turn specific targeted areas into giant balls of fire for a long time." + name = "\improper AGM-99 'Napalm'" + desc = "The AGM-99 'Napalm' is an incendiary missile used to turn specific targeted areas into giant balls of fire for a long time. Can be loaded into the LAU-444 Guided Missile Launcher." icon_state = "napalm" ammo_id = "n" point_cost = 500 @@ -355,7 +355,7 @@ /obj/structure/ship_ammo/rocket/thermobaric name = "\improper BLU-200 'Dragons Breath'" - desc = "The BLU-200 Dragons Breath a thermobaric fuel-air bomb. The aerosolized fuel mixture creates a vacuum when ignited causing serious damage to those in its way." + desc = "The BLU-200 Dragons Breath a thermobaric fuel-air bomb. The aerosolized fuel mixture creates a vacuum when ignited causing serious damage to those in its way. Can be loaded into the LAU-444 Guided Missile Launcher." icon_state = "fatty" ammo_id = "f" travelling_time = 50 @@ -373,8 +373,8 @@ //minirockets /obj/structure/ship_ammo/minirocket - name = "mini rocket stack" - desc = "A pack of laser guided mini rockets." + name = "\improper AGR-59 'Mini-Mike'" + desc = "The AGR-59 'Mini-Mike' minirocket is a cheap and efficient means of putting hate down range. Though rockets lack a guidance package, it makes up for it in ammunition count. Can be loaded into the LAU-229 Rocket Pod." icon_state = "minirocket" icon = 'icons/obj/structures/props/almayer_props.dmi' equipment_type = /obj/structure/dropship_equipment/weapon/minirocket_pod @@ -410,8 +410,8 @@ /obj/structure/ship_ammo/minirocket/incendiary - name = "incendiary mini rocket stack" - desc = "A pack of laser guided incendiary mini rockets." + name = "\improper AGR-59-I 'Mini-Mike'" + desc = "The AGR-59-I 'Mini-Mike' incendiary minirocket is a cheap and efficient means of putting hate down range AND setting them on fire! Though rockets lack a guidance package, it makes up for it in ammunition count. Can be loaded into the LAU-229 Rocket Pod." icon_state = "minirocket_inc" point_cost = 500 fire_mission_delay = 3 //high cooldown @@ -422,8 +422,8 @@ fire_spread(impact, create_cause_data(initial(name), source_mob), 3, 25, 20, "#EE6515") /obj/structure/ship_ammo/sentry - name = "multi-purpose area denial sentry" - desc = "An omni-directional sentry, capable of defending an area from lightly armored hostile incursion." + name = "\improper A/C-49-P Air Deployable Sentry" + desc = "An omni-directional sentry, capable of defending an area from lightly armored hostile incursion. Can be loaded into the LAG-14 Internal Sentry Launcher." icon_state = "launchable_sentry" equipment_type = /obj/structure/dropship_equipment/weapon/launch_bay ammo_count = 1 diff --git a/code/modules/cm_marines/dropship_equipment.dm b/code/modules/cm_marines/dropship_equipment.dm index 6225ae716fa9..81d7c1fd2307 100644 --- a/code/modules/cm_marines/dropship_equipment.dm +++ b/code/modules/cm_marines/dropship_equipment.dm @@ -1,5 +1,5 @@ -/// Dropship equipments, mainly weaponry but also utility implements +/// Dropship equipment, mainly weaponry but also utility implements /obj/structure/dropship_equipment density = TRUE anchored = TRUE @@ -153,7 +153,7 @@ /// Turret holder for dropship automated sentries /obj/structure/dropship_equipment/sentry_holder equip_categories = list(DROPSHIP_WEAPON, DROPSHIP_CREW_WEAPON) - name = "sentry deployment system" + name = "\improper A/A-32-P Sentry Defense System" desc = "A box that deploys a sentry turret. Fits on both the external weapon and crew compartment attach points of dropships. You need a powerloader to lift it." density = FALSE health = null @@ -284,7 +284,7 @@ /// Holder for the dropship mannable machinegun system /obj/structure/dropship_equipment/mg_holder - name = "machine gun deployment system" + name = "\improper MTU-4B Door Gunner Hardpoint System" desc = "A box that deploys a crew-served scoped M56D heavy machine gun. Fits on both the external weapon and crew compartment attach points of dropships. You need a powerloader to lift it." density = FALSE equip_categories = list(DROPSHIP_WEAPON, DROPSHIP_CREW_WEAPON) @@ -419,13 +419,13 @@ /obj/structure/dropship_equipment/fuel/fuel_enhancer - name = "fuel enhancer" + name = "\improper fuel enhancer" desc = "A fuel enhancement system for dropships. It improves the thrust produced by the fuel combustion for faster travels. Fits inside the engine attach points. You need a powerloader to lift it." icon_state = "fuel_enhancer" point_cost = 800 /obj/structure/dropship_equipment/fuel/cooling_system - name = "cooling system" + name = "\improper cooling system" desc = "A cooling system for dropships. It produces additional cooling reducing delays between launch. Fits inside the engine attach points. You need a powerloader to lift it." icon_state = "cooling_system" point_cost = 800 @@ -437,7 +437,7 @@ equip_categories = list(DROPSHIP_ELECTRONICS) /obj/structure/dropship_equipment/electronics/chaff_launcher - name = "chaff launcher" + name = "\improper AN/ALE-203 Chaff Launcher" icon_state = "chaff_launcher" point_cost = 0 @@ -445,7 +445,7 @@ #define LIGHTING_MAX_LUMINOSITY_SHIPLIGHTS 12 /obj/structure/dropship_equipment/electronics/spotlights - name = "spotlight" + name = "\improper AN/LEN-15 Spotlight" icon_state = "spotlights" desc = "A set of high-powered spotlights to illuminate large areas. Fits on electronics attach points of dropships. Moving this will require a powerloader." is_interactable = TRUE @@ -490,12 +490,12 @@ /obj/structure/dropship_equipment/electronics/flare_launcher - name = "flare launcher" + name = "\improper AN/ALE-557 Flare Launcher" icon_state = "flare_launcher" point_cost = 0 /obj/structure/dropship_equipment/electronics/targeting_system - name = "targeting system" + name = "\improper AN/AAQ-178 Weapon Targeting System" icon_state = "targeting_system" desc = "A targeting system for dropships. It improves firing accuracy on laser targets. Fits on electronics attach points. You need a powerloader to lift this." point_cost = 800 @@ -507,8 +507,10 @@ icon_state = initial(icon_state) /obj/structure/dropship_equipment/electronics/landing_zone_detector - name = "\improper LZ detector" + + name = "\improper AN/AVD-60 LZ detector" desc = "An electronic device linked to the dropship's camera system that lets you observe your landing zone." + icon_state = "lz_detector" point_cost = 50 var/obj/structure/machinery/computer/cameras/dropship/linked_cam_console @@ -561,7 +563,7 @@ /obj/structure/dropship_equipment/adv_comp/docking - name = "docking computer" + name = "\improper AN/AKW-222 Docking Computer" icon_state = "docking_comp" point_cost = 0 @@ -688,7 +690,7 @@ /obj/structure/dropship_equipment/weapon/heavygun name = "\improper GAU-21 30mm cannon" - desc = "A dismounted GAU-21 'Rattler' 30mm rotary cannon. It seems to be missing its feed links and has exposed connection wires. Capable of firing 5200 rounds a minute, feared by many for its power. Earned the nickname 'Rattler' from the vibrations it would cause on dropships in its initial production run." + desc = "A dismounted GAU-21 'Rattler' 30mm rotary cannon. It seems to be missing its feed links and has exposed connection wires. Capable of firing 5200 rounds a minute, feared by many for its power. Earned the nickname 'Rattler' from the vibrations it would cause on dropships in its initial production run. Accepts PGU-100/PGU-105 ammo crates" icon_state = "30mm_cannon" firing_sound = 'sound/effects/gau_incockpit.ogg' point_cost = 400 @@ -704,9 +706,9 @@ /obj/structure/dropship_equipment/weapon/rocket_pod - name = "missile pod" - icon_state = "rocket_pod" - desc = "A missile pod weapon system capable of launching a single laser-guided missile. Moving this will require some sort of lifter." + name = "\improper LAU-444 Guided Missile Launcher" + icon_state = "rocket_pod" //I want to force whoever used rocket and missile interchangeably to come back and look at this god damn mess. + desc = "A missile pod weapon system capable of launching a single laser-guided missile. Moving this will require some sort of lifter. Accepts AGM, AIM, BLU, and GBU missile systems." firing_sound = 'sound/effects/rocketpod_fire.ogg' firing_delay = 5 point_cost = 600 @@ -724,9 +726,9 @@ /obj/structure/dropship_equipment/weapon/minirocket_pod - name = "minirocket pod" + name = "\improper LAU-229 Rocket Pod" icon_state = "minirocket_pod" - desc = "A mini rocket pod capable of launching six laser-guided mini rockets. Moving this will require some sort of lifter." + desc = "A rocket pod capable of launching six laser-guided mini rockets. Moving this will require some sort of lifter. Accepts the AGR-59 series of minirockets." icon = 'icons/obj/structures/props/almayer_props64.dmi' firing_sound = 'sound/effects/rocketpod_fire.ogg' firing_delay = 10 //1 seconds @@ -745,9 +747,9 @@ ammo_equipped = null /obj/structure/dropship_equipment/weapon/laser_beam_gun - name = "laser beam gun" + name = "\improper LWU-6B Laser Cannon" icon_state = "laser_beam" - desc = "State of the art technology recently acquired by the USCM, it fires a battery-fed pulsed laser beam at near lightspeed setting on fire everything it touches. Moving this will require some sort of lifter." + desc = "State of the art technology recently acquired by the USCM, it fires a battery-fed pulsed laser beam at near lightspeed setting on fire everything it touches. Moving this will require some sort of lifter. Accepts the BTU-17/LW Hi-Cap Laser Batteries." icon = 'icons/obj/structures/props/almayer_props64.dmi' firing_sound = 'sound/effects/phasein.ogg' firing_delay = 50 //5 seconds @@ -763,9 +765,9 @@ else icon_state = "laser_beam" /obj/structure/dropship_equipment/weapon/launch_bay - name = "launch bay" + name = "\improper LAG-14 Internal Sentry Launcher" icon_state = "launch_bay" - desc = "A launch bay to drop special ordnance. Fits inside the dropship's crew weapon emplacement. Moving this will require some sort of lifter." + desc = "A launch bay to drop special ordnance. Fits inside the dropship's crew weapon emplacement. Moving this will require some sort of lifter. Accepts the A/C-49-P Air Deployable Sentry as ammunition." icon = 'icons/obj/structures/props/almayer_props.dmi' firing_sound = 'sound/weapons/gun_flare_explode.ogg' firing_delay = 10 //1 seconds @@ -784,7 +786,7 @@ /obj/structure/dropship_equipment/medevac_system - name = "medevac system" + name = "\improper RMU-4M Medevac System" desc = "A winch system to lift injured marines on medical stretchers onto the dropship. Acquire lift target through the dropship equipment console." equip_categories = list(DROPSHIP_CREW_WEAPON) icon_state = "medevac_system" @@ -1016,7 +1018,7 @@ // Fulton extraction system /obj/structure/dropship_equipment/fulton_system - name = "fulton recovery system" + name = "\improper RMU-19 Fulton Recovery System" desc = "A winch system to collect any fulton recovery balloons in high altitude. Make sure you turn it on!" equip_categories = list(DROPSHIP_CREW_WEAPON) icon_state = "fulton_system" @@ -1133,7 +1135,7 @@ // Rappel deployment system /obj/structure/dropship_equipment/rappel_system - name = "rappel deployment system" + name = "\improper HPU-1 Rappel Deployment System" equip_categories = list(DROPSHIP_CREW_WEAPON) icon_state = "rappel_module_packaged" point_cost = 50 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/radar.dm b/code/modules/cm_marines/radar.dm index 5e85ff8950c7..f6751a8fe913 100644 --- a/code/modules/cm_marines/radar.dm +++ b/code/modules/cm_marines/radar.dm @@ -204,17 +204,20 @@ if(!trackable(humanoid)) continue var/crewmember_name = "Unknown" + var/crewmember_rank = "Unknown" if(humanoid.wear_id) var/obj/item/card/id/ID = humanoid.wear_id.GetID() if(ID?.registered_name) crewmember_name = ID.registered_name + if(ID?.assignment) + crewmember_rank = ID.assignment switch(humanoid.stat) if(CONSCIOUS) - crewmember_name = "[crewmember_name] (Conscious)" + crewmember_name = "[crewmember_name] ([crewmember_rank]) (Conscious)" if(UNCONSCIOUS) - crewmember_name = "[crewmember_name] (Unconscious)" + crewmember_name = "[crewmember_name] ([crewmember_rank]) (Unconscious)" if(DEAD) - crewmember_name = "[crewmember_name] (DEAD)" + crewmember_name = "[crewmember_name] ([crewmember_rank]) (DEAD)" var/list/crewinfo = list( ref = REF(humanoid), name = crewmember_name, diff --git a/code/modules/cm_phone/phone.dm b/code/modules/cm_phone/phone.dm index a99bb5603dcb..fd9c8aa02d44 100644 --- a/code/modules/cm_phone/phone.dm +++ b/code/modules/cm_phone/phone.dm @@ -24,7 +24,8 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) var/range = 7 var/enabled = TRUE - var/callable = TRUE + /// Whether or not the phone is receiving calls or not. Varies between on/off or forcibly on/off. + var/do_not_disturb = PHONE_DND_OFF var/base_icon_state @@ -35,7 +36,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) var/list/networks_transmit = list(FACTION_MARINE) /obj/structure/transmitter/hidden - callable = FALSE + do_not_disturb = PHONE_DND_FORCED /obj/structure/transmitter/Initialize(mapload, ...) . = ..() @@ -80,7 +81,11 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) for(var/possible_phone in GLOB.transmitters) var/obj/structure/transmitter/target_phone = possible_phone - if(TRANSMITTER_UNAVAILABLE(target_phone) || !target_phone.callable) // Phone not available + var/current_dnd = FALSE + switch(target_phone.do_not_disturb) + if(PHONE_DND_ON, PHONE_DND_FORCED) + current_dnd = TRUE + if(TRANSMITTER_UNAVAILABLE(target_phone) || current_dnd) // Phone not available continue var/net_link = FALSE for(var/network in networks_transmit) @@ -124,9 +129,18 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) call_phone(user, params["phone_id"]) . = TRUE SStgui.close_uis(src) + if("toggle_dnd") + toggle_dnd(user) update_icon() +/obj/structure/transmitter/ui_data(mob/user) + var/list/data = list() + + data["availability"] = do_not_disturb + + return data + /obj/structure/transmitter/ui_static_data(mob/user) . = list() @@ -172,6 +186,18 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) user.put_in_hands(attached_to) +/obj/structure/transmitter/proc/toggle_dnd(mob/living/carbon/human/user) + switch(do_not_disturb) + if(PHONE_DND_ON) + do_not_disturb = PHONE_DND_OFF + to_chat(user, SPAN_NOTICE("Do Not Disturb has been disabled. You can now receive calls.")) + if(PHONE_DND_OFF) + do_not_disturb = PHONE_DND_ON + to_chat(user, SPAN_WARNING("Do Not Disturb has been enabled. No calls will be received.")) + else + return FALSE + return TRUE + /obj/structure/transmitter/attack_hand(mob/user) . = ..() @@ -543,12 +569,18 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) UnregisterSignal(attached_to, COMSIG_MOVABLE_MOVED) reset_tether() +/obj/structure/transmitter/no_dnd + do_not_disturb = PHONE_DND_FORBIDDEN + //rotary desk phones (need a touch tone handset at some point) /obj/structure/transmitter/rotary name = "rotary telephone" icon_state = "rotary_phone" desc = "The finger plate is a little stiff." +/obj/structure/transmitter/rotary/no_dnd + do_not_disturb = PHONE_DND_FORBIDDEN + /obj/structure/transmitter/touchtone name = "touch-tone telephone" icon_state = "rotary_phone"//placeholder diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index 4e5dcb8c6386..272882779d57 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -35,7 +35,6 @@ var/charge_rate = 30 /// Cooldown on draining power from APC var/charge_cooldown = COOLDOWN_BRACER_CHARGE - var/cloaked = 0 var/cloak_timer = 0 var/cloak_malfunction = 0 /// Determines the alpha level of the cloaking device. @@ -71,6 +70,7 @@ flags_item = initial(flags_item) UnregisterSignal(user, list(COMSIG_MOB_STAT_SET_ALIVE, COMSIG_MOB_DEATH)) SSminimaps.remove_marker(user) + unlock_bracer() // So as to prevent the bracer being stuck with nodrop if the pred gets gibbed/arm removed/etc. ..() /obj/item/clothing/gloves/yautja/pickup(mob/living/user) @@ -96,7 +96,7 @@ human_holder.update_power_display(perc_charge) //Non-Yautja have a chance to get stunned with each power drain - if(!cloaked) + if(!HAS_TRAIT(human_holder, TRAIT_CLOAKED)) return if(human_holder.stat == DEAD) decloak(human_holder, TRUE) @@ -293,7 +293,7 @@ var/mob/living/carbon/human/wearer = loc if(wearer.gloves == src) wearer.visible_message(SPAN_DANGER("You hear a hiss and crackle!"), SPAN_DANGER("Your bracers hiss and spark!"), SPAN_DANGER("You hear a hiss and crackle!")) - if(cloaked) + if(HAS_TRAIT(wearer, TRAIT_CLOAKED)) decloak(wearer, TRUE, DECLOAK_EMP) else var/turf/our_turf = get_turf(src) @@ -336,7 +336,7 @@ //Non-Yautja have a chance to get stunned with each power drain if((!HAS_TRAIT(human, TRAIT_YAUTJA_TECH) && !human.hunter_data.thralled) && prob(4)) - if(cloaked) + if(HAS_TRAIT(human, TRAIT_CLOAKED)) decloak(human, TRUE, DECLOAK_SPECIES) shock_user(human) @@ -344,14 +344,14 @@ /obj/item/clothing/gloves/yautja/hunter/dropped(mob/user) move_chip_to_bracer() - if(cloaked) + if(HAS_TRAIT(user, TRAIT_CLOAKED)) decloak(user, TRUE) ..() /obj/item/clothing/gloves/yautja/hunter/on_enter_storage(obj/item/storage/S) if(ishuman(loc)) var/mob/living/carbon/human/human = loc - if(cloaked) + if(HAS_TRAIT(human, TRAIT_CLOAKED)) decloak(human, TRUE) . = ..() @@ -549,7 +549,7 @@ if(!istype(M) || M.is_mob_incapacitated()) return FALSE - if(cloaked) //Turn it off. + if(HAS_TRAIT(caller, TRAIT_CLOAKED)) //Turn it off. if(cloak_timer > world.time) to_chat(M, SPAN_WARNING("Your cloaking device is busy! Time left: [max(round((cloak_timer - world.time) / 10), 1)] seconds.")) return FALSE @@ -570,7 +570,6 @@ if(!drain_power(M, 50)) return FALSE - cloaked = TRUE ADD_TRAIT(M, TRAIT_CLOAKED, TRAIT_SOURCE_EQUIPMENT(WEAR_HANDS)) RegisterSignal(M, COMSIG_HUMAN_EXTINGUISH, PROC_REF(wrapper_fizzle_camouflage)) @@ -617,7 +616,6 @@ if(forced) cloak_malfunction = world.time + decloak_timer - cloaked = FALSE REMOVE_TRAIT(user, TRAIT_CLOAKED, TRAIT_SOURCE_EQUIPMENT(WEAR_HANDS)) log_game("[key_name_admin(user)] has disabled their cloaking device.") user.visible_message(SPAN_WARNING("[user] shimmers into existence!"), SPAN_WARNING("Your cloaking device deactivates.")) @@ -734,7 +732,7 @@ var/mob/living/carbon/human/M = caller - if(cloaked) + if(HAS_TRAIT(M, TRAIT_CLOAKED)) to_chat(M, SPAN_WARNING("Not while you're cloaked. It might disrupt the sequence.")) return if(M.stat == DEAD) @@ -838,7 +836,7 @@ to_chat(caller, SPAN_WARNING("You recently activated the stabilising crystal. Be patient.")) return FALSE - if(!drain_power(caller, 1000)) + if(!drain_power(caller, 400)) return FALSE inject_timer = TRUE @@ -879,7 +877,7 @@ to_chat(usr, SPAN_WARNING("Your bracer is still generating a new healing capsule!")) return FALSE - if(!drain_power(caller, 800)) + if(!drain_power(caller, 600)) return FALSE healing_capsule_timer = TRUE @@ -1164,18 +1162,26 @@ /// The actual unlock/lock function. /obj/item/clothing/gloves/yautja/proc/toggle_lock_internal(mob/wearer, force_lock) if(((flags_item & NODROP) || (flags_inventory & CANTSTRIP)) && !force_lock) - flags_item &= ~NODROP - flags_inventory &= ~CANTSTRIP - if(!isyautja(wearer)) - to_chat(wearer, SPAN_WARNING("The bracer beeps pleasantly, releasing it's grip on your forearm.")) - else - to_chat(wearer, SPAN_WARNING("With an angry blare the bracer releases your forearm.")) - return TRUE + return unlock_bracer() + return lock_bracer() + +/obj/item/clothing/gloves/yautja/proc/lock_bracer(mob/wearer) flags_item |= NODROP flags_inventory |= CANTSTRIP - if(isyautja(wearer)) - to_chat(wearer, SPAN_WARNING("The bracer clamps securely around your forearm and beeps in a comfortable, familiar way.")) - else - to_chat(wearer, SPAN_WARNING("The bracer clamps painfully around your forearm and beeps angrily. It won't come off!")) + if(wearer) + if(isyautja(wearer)) + to_chat(wearer, SPAN_WARNING("The bracer clamps securely around your forearm and beeps in a comfortable, familiar way.")) + else + to_chat(wearer, SPAN_WARNING("The bracer clamps painfully around your forearm and beeps angrily. It won't come off!")) + return TRUE + +/obj/item/clothing/gloves/yautja/proc/unlock_bracer(mob/wearer) + flags_item &= ~NODROP + flags_inventory &= ~CANTSTRIP + if(wearer) + if(!isyautja(wearer)) + to_chat(wearer, SPAN_WARNING("The bracer beeps pleasantly, releasing its grip on your forearm.")) + else + to_chat(wearer, SPAN_WARNING("With an angry blare, the bracer releases your forearm.")) return TRUE diff --git a/code/modules/cm_preds/yaut_hudprocs.dm b/code/modules/cm_preds/yaut_hudprocs.dm index b29f45cd31d9..6131ac135cb7 100644 --- a/code/modules/cm_preds/yaut_hudprocs.dm +++ b/code/modules/cm_preds/yaut_hudprocs.dm @@ -150,7 +150,7 @@ var/list/target_list = list() for(var/mob/living/carbon/target in view(7, usr.client)) - if((ishuman_strict(target) || isxeno(target)) && target.stat != DEAD) + if(ishuman_strict(target) && (target.stat != DEAD)) target_list += target var/mob/living/carbon/T = tgui_input_list(usr, "Target", "Choose a target.", target_list) @@ -187,7 +187,7 @@ var/list/target_list = list() for(var/mob/living/carbon/target in view(7, usr.client)) - if((ishuman_strict(target) || isxeno(target)) && target.stat != DEAD) + if(ishuman_strict(target) && (target.stat != DEAD)) if(target.hunter_data.honored) target_list += target diff --git a/code/modules/cm_preds/yaut_items.dm b/code/modules/cm_preds/yaut_items.dm index 9e56d0da7098..c86a3fdd23e2 100644 --- a/code/modules/cm_preds/yaut_items.dm +++ b/code/modules/cm_preds/yaut_items.dm @@ -430,10 +430,12 @@ if(do_after(user, 10 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) // Display fancy animation for you and the person you might be pulling (Legacy) + REMOVE_TRAIT_ALLSOURCES(user, TRAIT_CLOAKED) user.visible_message(SPAN_WARNING("[icon2html(user, viewers(src))][user] disappears!")) var/tele_time = animation_teleport_quick_out(user) var/mob/living/M = user.pulling if(istype(M)) // Pulled person + REMOVE_TRAIT_ALLSOURCES(M, TRAIT_CLOAKED) M.visible_message(SPAN_WARNING("[icon2html(M, viewers(src))][M] disappears!")) animation_teleport_quick_out(M) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 762ab9ecbb0f..0ea527847d72 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -337,11 +337,12 @@ /obj/item/weapon/yautja/combistick/IsShield() return on -/obj/item/weapon/yautja/combistick/verb/use_unique_action() +/obj/item/weapon/yautja/combistick/verb/fold_combistick() set category = "Weapons" - set name = "Unique Action" - set desc = "Activate or deactivate the combistick." - set src in usr + set name = "Collapse Combi-stick" + set desc = "Collapse or extend the combistick." + set src = usr.contents + unique_action(usr) /obj/item/weapon/yautja/combistick/attack_self(mob/user) @@ -954,12 +955,15 @@ if(!HAS_TRAIT(user, TRAIT_YAUTJA_TECH)) to_chat(user, SPAN_WARNING("You have no idea how this thing works!")) return + if(charge_time < 7) + to_chat(user, SPAN_WARNING("The rifle does not have enough power remaining!")) + return return ..() /obj/item/weapon/gun/energy/yautja/plasmarifle/load_into_chamber() ammo = GLOB.ammo_list[/datum/ammo/energy/yautja/rifle/bolt] - charge_time -= 10 + charge_time -= 7 var/obj/projectile/projectile = create_bullet(ammo, initial(name)) projectile.set_light(1) in_chamber = projectile @@ -974,7 +978,8 @@ /obj/item/weapon/gun/energy/yautja/plasmarifle/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) qdel(projectile_to_fire) - if(refund) charge_time *= 2 + if(refund) + charge_time += 7 return TRUE #define FIRE_MODE_STANDARD "Standard" @@ -1164,15 +1169,15 @@ switch(strength) if("low power stun bolts") strength = "high power stun bolts" - charge_cost = 100 - set_fire_delay(FIRE_DELAY_TIER_6 * 3) + charge_cost = 50 + set_fire_delay(FIRE_DELAY_TIER_1) fire_sound = 'sound/weapons/pred_lasercannon.ogg' to_chat(user, SPAN_NOTICE("[src] will now fire [strength].")) ammo = GLOB.ammo_list[/datum/ammo/energy/yautja/caster/bolt/stun] if("high power stun bolts") strength = "plasma immobilizers" - charge_cost = 300 - set_fire_delay(FIRE_DELAY_TIER_6 * 20) + charge_cost = 200 + set_fire_delay(FIRE_DELAY_TIER_2 * 8) fire_sound = 'sound/weapons/pulse.ogg' to_chat(user, SPAN_NOTICE("[src] will now fire [strength].")) ammo = GLOB.ammo_list[/datum/ammo/energy/yautja/caster/sphere/stun] @@ -1187,8 +1192,8 @@ switch(strength) if("plasma bolts") strength = "plasma spheres" - charge_cost = 1200 - set_fire_delay(FIRE_DELAY_TIER_6 * 20) + charge_cost = 1000 + set_fire_delay(FIRE_DELAY_TIER_2 * 12) fire_sound = 'sound/weapons/pulse.ogg' to_chat(user, SPAN_NOTICE("[src] will now fire [strength].")) ammo = GLOB.ammo_list[/datum/ammo/energy/yautja/caster/sphere] 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/cmb.dm b/code/modules/gear_presets/cmb.dm index 2c09b8c89b6d..3ce7a6ec281d 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -185,7 +185,7 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/holdout, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/m15/rubber, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/handheld_distress_beacon_CMB, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/flashlight, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/camera, WEAR_IN_BACK) @@ -426,12 +426,6 @@ . = ..() new_human.nutrition = rand(NUTRITION_MAX, NUTRITION_NORMAL) -/datum/equipment_preset/uscm/cmb/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" - return paygrade - /datum/equipment_preset/uscm/cmb/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine, WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY) 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 deleted file mode 100644 index 919e67e7cbf9..000000000000 --- a/code/modules/gear_presets/survivors.dm +++ /dev/null @@ -1,1741 +0,0 @@ -/datum/equipment_preset/survivor - name = JOB_SURVIVOR - assignment = JOB_SURVIVOR - rank = JOB_SURVIVOR - - skills = /datum/skills/civilian/survivor - languages = list(LANGUAGE_ENGLISH) - paygrade = "C" - idtype = /obj/item/card/id/lanyard - faction = FACTION_SURVIVOR - faction_group = list(FACTION_SURVIVOR) - origin_override = ORIGIN_CIVILIAN - - access = list(ACCESS_CIVILIAN_PUBLIC) - - minimap_icon = "surv" - minimap_background = MINIMAP_ICON_BACKGROUND_CIVILIAN - - var/survivor_variant = CIVILIAN_SURVIVOR - -/datum/equipment_preset/survivor/load_name(mob/living/carbon/human/new_human, randomise) - new_human.gender = pick(MALE, FEMALE) - var/datum/preferences/A = new - A.randomize_appearance(new_human) - var/random_name = capitalize(pick(new_human.gender == MALE ? first_names_male : first_names_female)) + " " + capitalize(pick(last_names)) - new_human.change_real_name(new_human, random_name) - new_human.age = rand(21,45) - -/datum/equipment_preset/survivor/load_gear(mob/living/carbon/human/new_human) // Essentially where you will put the most essential piece of kit you want survivors to spawn with. - add_random_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/survival/full(new_human), WEAR_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) - add_survivor_weapon_pistol(new_human) - -/datum/equipment_preset/survivor/load_id(mob/living/carbon/human/new_human, client/mob_client) - var/obj/item/clothing/under/uniform = new_human.w_uniform - if(istype(uniform)) - uniform.has_sensor = UNIFORM_HAS_SENSORS - uniform.sensor_faction = FACTION_COLONIST - return ..() - - -// ----- Scientist Survivor - -/datum/equipment_preset/survivor/scientist - name = "Survivor - Scientist" - assignment = "Scientist" - skills = /datum/skills/civilian/survivor/scientist - flags = EQUIPMENT_PRESET_START_OF_ROUND - idtype = /obj/item/card/id/silver/clearance_badge/scientist - access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_MEDBAY) - - survivor_variant = SCIENTIST_SURVIVOR - -/datum/equipment_preset/survivor/scientist/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/green(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/virologist(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/green(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/chem(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/green(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/paper/research_notes/good(new_human), WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/reagent_container/glass/beaker/vial/random/good(new_human), WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical/full(new_human), WEAR_R_STORE) - add_survivor_weapon_civilian(new_human) - add_random_survivor_research_gear(new_human) - - ..() - -/datum/equipment_preset/survivor/scientist/soro - name = "Survivor - Sorokyne Strata Researcher" - assignment = "Sorokyne Strata Researcher" - -/datum/equipment_preset/survivor/scientist/soro/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/tox(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) - - ..() - -/datum/equipment_preset/survivor/scientist/shiva - name = "Survivor - Shivas Snowball Researcher" - assignment = "Shivas Snowball Researcher" - -/datum/equipment_preset/survivor/scientist/shiva/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/tox(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/purple(new_human), WEAR_JACKET) - - ..() - -/datum/equipment_preset/survivor/scientist/corsat - name = "Survivor - CORSAT Researcher" - assignment = "CORSAT Researcher" - -/datum/equipment_preset/survivor/scientist/corsat/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/researcher(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/scientist/florina - name = "Survivor - Florina Researcher" - assignment = "Florina Researcher" - -/datum/equipment_preset/survivor/scientist/florina/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/purple(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/chem(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/scientist/lv - name = "Survivor - LV-624 Archeologist" - assignment = "LV-624 Archeologist" - -/datum/equipment_preset/survivor/scientist/lv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/researcher(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/scientist/nv - name = "Survivor - New Varadero Researcher" - assignment = "New Varadero Researcher" - -/datum/equipment_preset/survivor/scientist/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/chem(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/purple(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/scientist/solaris - name = "Survivor - Solaris Scientist" - assignment = "Solaris Scientist" - -/datum/equipment_preset/survivor/scientist/solaris/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/green(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/virologist(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/green(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/green(new_human), WEAR_FEET) - - ..() - -// ----- Doctor Survivor - -/datum/equipment_preset/survivor/doctor - name = "Survivor - Doctor" - assignment = "Doctor" - skills = /datum/skills/civilian/survivor/doctor - flags = EQUIPMENT_PRESET_START_OF_ROUND - idtype = /obj/item/card/id/silver/clearance_badge - access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_MEDBAY, ACCESS_CIVILIAN_COMMAND) - - survivor_variant = MEDICAL_SURVIVOR - -/datum/equipment_preset/survivor/doctor/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/med(new_human), WEAR_BACK) - 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/latex(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(new_human), WEAR_JACKET) - var/random_gear = rand(0,4) - switch(random_gear) - if(0) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_R_STORE) - if(1) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical/full(new_human), WEAR_R_STORE) - if(2) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE) - if(3) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/first_responder/full(new_human), WEAR_R_STORE) - if(4) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medkit/full_advanced(new_human), WEAR_R_STORE) - add_random_survivor_medical_gear(new_human) - add_survivor_weapon_civilian(new_human) - - - ..() - -/datum/equipment_preset/survivor/doctor/trijent - name = "Survivor - Trijent Doctor" - assignment = "Trijent Dam Doctor" - -/datum/equipment_preset/survivor/doctor/trijent/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/blue(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/doctor/soro - name = "Survivor - Sorokyne Strata Doctor" - assignment = "Sorokyne Strata Doctor" - -/datum/equipment_preset/survivor/doctor/soro/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/veteran/soviet_uniform_01(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/doctor/corsat - name = "Survivor - CORSAT Doctor" - assignment = "CORSAT Doctor" - -/datum/equipment_preset/survivor/doctor/corsat/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/green(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/green(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/doctor/florina - name = "Survivor - Florina Doctor" - assignment = "Florina Doctor" - -/datum/equipment_preset/survivor/doctor/florina/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/doctor/kutjevo - name = "Survivor - Kutjevo Doctor" - assignment = "Kutjevo Doctor" - -/datum/equipment_preset/survivor/doctor/kutjevo/load_gear(mob/living/carbon/human/new_human) - if(new_human.disabilities & NEARSIGHTED) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES) - else - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) - add_random_kutjevo_survivor_uniform(new_human) - add_random_kutjevo_survivor_equipment(new_human) - 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/black(new_human), WEAR_HANDS) - - ..() - -/datum/equipment_preset/survivor/doctor/lv - name = "Survivor - LV-624 Emergency Medical Technician" - assignment = "LV-624 Emergency Medical Technician" - -/datum/equipment_preset/survivor/doctor/lv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human.back), WEAR_IN_BACK) - - ..() - -/datum/equipment_preset/survivor/doctor/nv - name = "Survivor - New Varadero Medical Technician" - assignment = "New Varadero Medical Technician" - -/datum/equipment_preset/survivor/doctor/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/doctor/solaris - name = "Survivor - Solaris Doctor" - assignment = "Solaris Doctor" - -/datum/equipment_preset/survivor/doctor/solaris/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/purple(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/doctor/shiva - name = "Survivor - Shivas Snowball Doctor" - assignment = "Shivas Snowball Doctor" - -/datum/equipment_preset/survivor/doctor/shiva/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/green(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/green(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - 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/white(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) - - ..() - -// ----- CL Survivor - -/datum/equipment_preset/survivor/corporate - name = "Survivor - Corporate Liaison" - assignment = "Corporate Liaison" - skills = /datum/skills/civilian/survivor - flags = EQUIPMENT_PRESET_START_OF_ROUND - paygrade = "WYC2" - idtype = /obj/item/card/id/silver/clearance_badge/cl - access = list( - ACCESS_CIVILIAN_PUBLIC, - ACCESS_CIVILIAN_COMMAND, - ACCESS_WY_GENERAL, - ACCESS_WY_COLONIAL, - ACCESS_WY_EXEC, - ) - languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) - - survivor_variant = CORPORATE_SURVIVOR - -/datum/equipment_preset/survivor/corporate/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/formal(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - add_random_cl_survivor_loot(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/centcom(new_human), WEAR_FEET) - add_survivor_weapon_civilian(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/document(new_human), WEAR_R_STORE) - - ..() - -/datum/equipment_preset/survivor/corporate/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - var/playtime = get_job_playtime(new_human.client, JOB_CORPORATE_LIAISON) - if(new_human.client.prefs.playtime_perks) - if(playtime > JOB_PLAYTIME_TIER_4) - return "WYC5" - else if(playtime > JOB_PLAYTIME_TIER_3) - return "WYC4" - else if(playtime > JOB_PLAYTIME_TIER_2) - return "WYC3" - else - return paygrade - return paygrade - -/datum/equipment_preset/survivor/corporate/shiva - name = "Survivor - Shivas Snowball Corporate Liaison" - assignment = "Shivas Snowball Corporate Liaison" - -/datum/equipment_preset/survivor/corporate/shiva/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/formal(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) - 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/white(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/navy(new_human), WEAR_JACKET) - - ..() - -/datum/equipment_preset/survivor/corporate/solaris - name = "Survivor - Solaris Ridge Corporate Liaison" - assignment = "Solaris Ridge Corporate Liaison" - -/datum/equipment_preset/survivor/corporate/solaris/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/outing/red(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) - if(new_human.disabilities & NEARSIGHTED) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/prescription(new_human), WEAR_EYES) - else - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - - ..() - -// ----- Security Survivor - -/datum/equipment_preset/survivor/security - name = "Survivor - Security" - assignment = "Security" - skills = /datum/skills/civilian/survivor/marshal - flags = EQUIPMENT_PRESET_START_OF_ROUND - idtype = /obj/item/card/id/data - access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_BRIG,ACCESS_CIVILIAN_COMMAND) - - survivor_variant = SECURITY_SURVIVOR - -/datum/equipment_preset/survivor/security/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(new_human), WEAR_HEAD) - if(new_human.disabilities & NEARSIGHTED) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/prescription(new_human), WEAR_EYES) - else - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine(new_human), WEAR_R_STORE) - add_survivor_weapon_security(new_human) - ..() - -/datum/equipment_preset/survivor/security/trijent - name = "Survivor - Trijent Security Guard" - assignment = "Trijent Dam Security Guard" - -/datum/equipment_preset/survivor/security/trijent/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security/navyblue(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/marine/mp/mpcap(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit/black(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/security/soro - name = "Survivor - Sorokyne Strata Security" - assignment = "Sorokyne Strata Security" - -/datum/equipment_preset/survivor/security/soro/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/veteran/soviet_uniform_01(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/soviet(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) - - ..() - -/datum/equipment_preset/survivor/security/corsat - name = "Survivor - CORSAT Security Guard" - assignment = "Weyland-Yutani Security Guard" - languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) - -/datum/equipment_preset/survivor/security/corsat/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/formal/servicedress(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) - if(new_human.disabilities & NEARSIGHTED) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/prescription(new_human), WEAR_EYES) - else - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/security/florina - name = "Survivor - Florina Prison Guard" - assignment = "Florina Prison Guard" - -/datum/equipment_preset/survivor/security/florina/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/security/kutjevo - name = "Survivor - Kutjevo Security Guard" - assignment = "Kutjevo Security Guard" - - -/datum/equipment_preset/survivor/security/kutjevo/load_gear(mob/living/carbon/human/new_human) - add_random_kutjevo_survivor_uniform(new_human) - add_random_kutjevo_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - 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/black(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/security/lv - name = "Survivor - LV-624 Security Guard" - assignment = "Weyland-Yutani Security Guard" - languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) - -/datum/equipment_preset/survivor/security/lv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/formal/servicedress(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/jungle(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/security/nv - name = "Survivor - New Varadero Security Guard" - assignment = "United Americas Peacekeeper" - languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) - -/datum/equipment_preset/survivor/security/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/ua_riot(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/security/shiva - name = "Survivor - Shivas Snowball Security Guard" - assignment = "United Americas Peacekeeper" - -/datum/equipment_preset/survivor/security/shiva/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/ua_riot(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/security/solaris - name = "Survivor - Solaris United Americas Peacekeepers" - assignment = "United Americas Peacekeeper" - -/datum/equipment_preset/survivor/security/solaris/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/sec/hos(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - - ..() - -// ----- Prisioner Survivors - -/datum/equipment_preset/survivor/prisoner - name = "Survivor - Prisoner" - assignment = "Prisoner" - skills = /datum/skills/civilian/survivor/prisoner - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - - survivor_variant = SECURITY_SURVIVOR - -/datum/equipment_preset/survivor/prisoner/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - if(prob(50)) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(new_human), WEAR_HEAD) - if(prob(50)) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human.back), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE) - add_survivor_weapon_civilian(new_human) - ..() - -/datum/equipment_preset/survivor/gangleader - name = "Survivor - Gang Leader" - assignment = "Gang Leader" - skills = /datum/skills/civilian/survivor/gangleader - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/gangleader/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - if(prob(50)) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(new_human), WEAR_HEAD) - if(prob(50)) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human.back), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE) - add_survivor_weapon_civilian(new_human) - ..() - -// ----- Civilian Survivor - -/datum/equipment_preset/survivor/civilian - name = "Survivor - Civilian" - assignment = "Civilian" - skills = /datum/skills/civilian/survivor - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/civilian/load_gear(mob/living/carbon/human/new_human) - var/random_gear = rand(0, 3) - switch(random_gear) - if(0) // Normal Colonist - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) - if(1) // Janitor - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/vir(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/mgoggles(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/purple(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/galoshes(new_human), WEAR_FEET) - if(2) // Bar Tender - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/waiter(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/lawyer/bluejacket(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/bowlerhat(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/fake_mustache(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/black(new_human), WEAR_HANDS) - 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/storage/beer_pack(new_human.back), WEAR_IN_BACK) - if(3) // Botanist - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/hyd(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(new_human), WEAR_JACKET) - 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/tool/hatchet(new_human.back), WEAR_IN_BACK) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general(new_human), WEAR_R_STORE) - add_survivor_weapon_civilian(new_human) - - ..() - -// ----- Chef Survivor - -/datum/equipment_preset/survivor/chef - name = "Survivor - Chef" - assignment = "Chef" - skills = /datum/skills/civilian/survivor/chef - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/chef/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(new_human), WEAR_JACKET) - 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/tool/kitchen/rollingpin(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general(new_human), WEAR_R_STORE) - add_survivor_weapon_civilian(new_human) - - ..() - -// ----- Chaplain Survivor - -/datum/equipment_preset/survivor/chaplain - name = "Survivor - Chaplain" - assignment = "Chaplain" - skills = /datum/skills/civilian/survivor/chaplain - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/chaplain/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/holidaypriest(new_human), WEAR_JACKET) - 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/storage/bible/booze(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general(new_human), WEAR_R_STORE) - add_survivor_weapon_civilian(new_human) - - ..() - -/datum/equipment_preset/survivor/chaplain/trijent - name = "Survivor - Trijent Chaplain" - assignment = "Trijent Chaplain" - -/datum/equipment_preset/survivor/chaplain/trijent/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/nun(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/nun_hood(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/holidaypriest(new_human), WEAR_JACKET) - - ..() - -/datum/equipment_preset/survivor/chaplain/kutjevo - name = "Survivor - Kutjevo Chaplain" - assignment = "Kutjevo Chaplain" - -/datum/equipment_preset/survivor/chaplain/kutjevo/load_gear(mob/living/carbon/human/new_human) - add_random_kutjevo_survivor_uniform(new_human) - add_random_kutjevo_survivor_equipment(new_human) - 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/black(new_human), WEAR_HANDS) - - ..() - -/datum/equipment_preset/survivor/chaplain/lv - name = "Survivor - LV-624 Priest" - assignment = "LV-624 Priest" - -/datum/equipment_preset/survivor/chaplain/lv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/priest_robe(new_human), WEAR_JACKET) - - ..() - -/datum/equipment_preset/survivor/chaplain/nv - name = "Survivor - New Varadero Priest" - assignment = "New Varadero Priest" - -/datum/equipment_preset/survivor/chaplain/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/priest_robe(new_human), WEAR_JACKET) - - ..() - -/datum/equipment_preset/survivor/chaplain/solaris - name = "Survivor - Solaris Chaplain" - assignment = "Solaris Chaplain" - -/datum/equipment_preset/survivor/chaplain/solaris/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/holidaypriest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/nun_hood(new_human), WEAR_HEAD) - - ..() - -// ----- Engineering Survivor - -/datum/equipment_preset/survivor/engineer - name = "Survivor - Engineer" - assignment = "Engineer" - skills = /datum/skills/civilian/survivor/engineer - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_ENGINEERING,ACCESS_CIVILIAN_LOGISTICS) - - survivor_variant = ENGINEERING_SURVIVOR - -/datum/equipment_preset/survivor/engineer/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/med_small_stack(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS) - 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/storage/belt/utility/full(new_human), WEAR_WAIST) - add_survivor_weapon_civilian(new_human) - - ..() - - -/datum/equipment_preset/survivor/engineer/trijent - name = "Survivor - Dam Maintenance Technician" - assignment = "Dam Maintenance Technician" - -/datum/equipment_preset/survivor/engineer/trijent/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/engi(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - - ..() - - -/datum/equipment_preset/survivor/engineer/lv - name = "Survivor - LV-624 Engineer" - assignment = "LV-624 Engineer" - -/datum/equipment_preset/survivor/engineer/lv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/dispatch(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/engineer/nv - name = "Survivor - New Varadero Technician" - assignment = "New Varadero Engineer" - -/datum/equipment_preset/survivor/engineer/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/dispatch(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - 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/head/hardhat/orange(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/engineer/shiva - name = "Survivor - Shivas Snowball Engineer" - assignment = "Shivas Snowball Engineer" - -/datum/equipment_preset/survivor/engineer/shiva/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/yellow(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/engineer/soro - name = "Survivor - Sorokyne Strata Political Prisioner" - assignment = "Sorokyne Strata Political Prisioner" - -/datum/equipment_preset/survivor/engineer/soro/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/soviet(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) - - ..() - -/datum/equipment_preset/survivor/engineer/trijent/hydro - name = "Survivor - Hydro Electric Engineer" - assignment = "Hydro Electric Engineer" - -/datum/equipment_preset/survivor/engineer/trijent/hydro/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/engineer/corsat - name = "Survivor - Corsat Station Engineer" - assignment = "Corsat Station Engineer" - -/datum/equipment_preset/survivor/engineer/corsat/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/engi(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - 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/head/beret/marine/techofficer(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/engineer/florina - name = "Survivor - Florina Engineer" - assignment = "Florina Engineer" - -/datum/equipment_preset/survivor/engineer/florina/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/white(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron/overalls(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/engineer/kutjevo - name = "Survivor - Kutjevo Engineer" - assignment = "Kutjevo Engineer" - -/datum/equipment_preset/survivor/engineer/kutjevo/load_gear(mob/living/carbon/human/new_human) - add_random_kutjevo_survivor_uniform(new_human) - add_random_kutjevo_survivor_equipment(new_human) - 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/black(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - - ..() - -/datum/equipment_preset/survivor/engineer/solaris - name = "Survivor - Solaris Engineer" - assignment = "Solaris Engineer" - -/datum/equipment_preset/survivor/engineer/solaris/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/yellow(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding/superior(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - - ..() - -// ----- Miner Survivor - -/datum/equipment_preset/survivor/miner - name = "Survivor - Miner" - assignment = "Miner" - skills = /datum/skills/civilian/survivor/miner - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS) - -/datum/equipment_preset/survivor/miner/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) - 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/tool/pickaxe(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/flashlight/lantern(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/full(new_human), WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) - add_survivor_weapon_civilian(new_human) - - ..() - -// --- Salesman Survivor - -/datum/equipment_preset/survivor/salesman - name = "Survivor - Salesman" - assignment = "Salesman" - skills = /datum/skills/civilian/survivor - flags = EQUIPMENT_PRESET_START_OF_ROUND - idtype = /obj/item/card/id/data - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/salesman/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/wcoat(new_human), WEAR_JACKET) - 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/storage/pouch/document(new_human), WEAR_R_STORE) - add_random_cl_survivor_loot(new_human) - add_survivor_weapon_civilian(new_human) - ..() - -// ---- Trucker Survivor - -/datum/equipment_preset/survivor/trucker - name = "Survivor - Trucker" - assignment = "Trucker" - skills = /datum/skills/civilian/survivor/trucker - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_ENGINEERING,ACCESS_CIVILIAN_LOGISTICS) - - survivor_variant = ENGINEERING_SURVIVOR - -/datum/equipment_preset/survivor/trucker/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/yellow(new_human), WEAR_HEAD) - 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/storage/backpack/satchel/eng(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/flashlight/lantern(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/full(new_human), WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/hardpoint/locomotion/van_wheels(new_human), WEAR_R_HAND) - add_survivor_weapon_civilian(new_human) - - ..() - -/datum/equipment_preset/survivor/trucker/lv - name = "Survivor - LV-624 Cargo Technician" - assignment = "LV-624 Cargo Technician" - -/datum/equipment_preset/survivor/trucker/lv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/yellow(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - - ..() - -/datum/equipment_preset/survivor/trucker/nv - name = "Survivor - New Varadero Vehicle Operator" - assignment = "New Varadero Vehicle Operator" - -/datum/equipment_preset/survivor/trucker/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(new_human), WEAR_EYES) - 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/head/cmcap/boonie(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - - ..() -/datum/equipment_preset/survivor/trucker/kutjevo - name = "Survivor - Kutjevo Heavy Vehicle Operator" - assignment = "Kutjevo Heavy Vehicle Operator" - -/datum/equipment_preset/survivor/trucker/kutjevo/load_gear(mob/living/carbon/human/new_human) - add_random_kutjevo_survivor_uniform(new_human) - add_random_kutjevo_survivor_equipment(new_human) - 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/black(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - - ..() - -/datum/equipment_preset/survivor/trucker/solaris - name = "Survivor - Solaris Heavy Vehicle Operator" - assignment = "Solaris Heavy Vehicle Operator" - skills = /datum/skills/civilian/survivor/trucker - -/datum/equipment_preset/survivor/trucker/solaris/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/worker_overalls(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron/overalls(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/red(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/big(new_human), WEAR_EYES) - - ..() - -/datum/equipment_preset/survivor/trucker/trijent - name = "Survivor - Trijent Dam Heavy Vehicle Operator" - assignment = "Trijent Dam Heavy Vehicle Operator" - skills = /datum/skills/civilian/survivor/trucker - -/datum/equipment_preset/survivor/trucker/trijent/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank(new_human), WEAR_IN_BACK) - - ..() - - -// ---- Colonial Marshal Survivor - -/datum/equipment_preset/survivor/colonial_marshal - name = "Survivor - Colonial Marshal Deputy" - assignment = "CMB Deputy" - paygrade = "GS-9" - skills = /datum/skills/civilian/survivor/marshal - flags = EQUIPMENT_PRESET_START_OF_ROUND - idtype = /obj/item/card/id/deputy - role_comm_title = "CMB DEP" - access = list( - ACCESS_CIVILIAN_PUBLIC, - ACCESS_CIVILIAN_RESEARCH, - ACCESS_CIVILIAN_ENGINEERING, - ACCESS_CIVILIAN_LOGISTICS, - ACCESS_CIVILIAN_BRIG, - ACCESS_CIVILIAN_MEDBAY, - ACCESS_CIVILIAN_COMMAND, - ) - - survivor_variant = SECURITY_SURVIVOR - -/datum/equipment_preset/survivor/colonial_marshal/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) - - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB(new_human), WEAR_HEAD) - if(new_human.disabilities & NEARSIGHTED) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/prescription(new_human), WEAR_EYES) - else - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/CMB(new_human), WEAR_JACKET) - 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/storage/pouch/magazine/large(new_human), WEAR_R_STORE) - add_survivor_weapon_security(new_human) - - ..() - -/datum/equipment_preset/survivor/colonial_marshal/florina - name = "Survivor - United Americas Riot Officer" - assignment = "United Americas Riot Officer" - -/datum/equipment_preset/survivor/colonial_marshal/florina/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/ua_riot(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/ua_riot(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/prop/helmetgarb/riot_shield(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/colonial_marshal/lv - name = "Survivor - LV-624 Head of Security" - assignment = "LV-624 Head of Security" - -/datum/equipment_preset/survivor/colonial_marshal/lv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security/navyblue(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/sec/hos(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/colonial_marshal/solaris - name = "Survivor - Solaris Colonial Marshal Deputy" - assignment = "CMB Deputy" - - -/datum/equipment_preset/survivor/colonial_marshal/solaris/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - - ..() - -/datum/equipment_preset/survivor/colonial_marshal/kutjevo - name = "Survivor - Kutjevo Colonial Marshal Deputy" - assignment = "CMB Deputy" - -/datum/equipment_preset/survivor/colonial_marshal/kutjevo/load_gear(mob/living/carbon/human/new_human) - add_random_kutjevo_survivor_uniform(new_human) - add_random_kutjevo_survivor_equipment(new_human) - 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/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) - - ..() - -/datum/equipment_preset/survivor/colonial_marshal/shiva - name = "Survivor - Shivas Colonial Marshal Deputy" - assignment = "CMB Deputy" - -/datum/equipment_preset/survivor/colonial_marshal/shiva/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security/corp(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/red(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - - ..() - -// ----- CL Survivor - -/datum/equipment_preset/survivor/interstellar_commerce_commission_liason - name = "Survivor - Interstellar Commerce Commission Liaison" - assignment = "Interstellar Commerce Commission Corporate Liaison" - skills = /datum/skills/civilian/survivor - idtype = /obj/item/card/id/silver/cl - paygrade = "WYC2" - role_comm_title = "ICC Rep." - flags = EQUIPMENT_PRESET_START_OF_ROUND - - survivor_variant = CORPORATE_SURVIVOR - -/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/New() - . = ..() - access = get_access(ACCESS_LIST_CIVIL_LIAISON) - -/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) - - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/centcom(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/document(new_human), WEAR_R_STORE) - add_survivor_weapon_civilian(new_human) - add_random_cl_survivor_loot(new_human) - - ..() - -/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/corsat - name = "Survivor - Interstellar Commerce Commission Liaison CORSAT" - assignment = "Interstellar Commerce Commission Corporate Liaison" - -/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/corsat/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/formal(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET) - - ..() - -/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/nv - name = "Survivor - Interstellar Commerce Commission Liaison New Varadero" - assignment = "Interstellar Commerce Commission Corporate Liaison" - -/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/nv/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/formal(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest/black(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/device/flashlight, WEAR_J_STORE) - new_human.equip_to_slot_or_del(new /obj/item/clipboard, WEAR_L_HAND) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses, WEAR_EYES) - - - - ..() - -// ----- Roughneck Survivor - -/datum/equipment_preset/survivor/roughneck - name = "Survivor - Roughneck" - assignment = "Roughneck" - skills = /datum/skills/civilian/survivor/pmc - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/roughneck/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/white(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron/overalls(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/centcom(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/centcom(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large(new_human), WEAR_R_STORE) - add_pmc_survivor_weapon(new_human) - - ..() - -// ----- Bum Survivor - -/datum/equipment_preset/survivor/beachbum - name = "Survivor - Beach Bum" - assignment = "Beach Bum" - skills = /datum/skills/civilian/survivor/prisoner - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/beachbum/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/shorts/red(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette(new_human), WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/botanic_leather(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/beer_pack(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/kitchen/knife/butcher(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/fancy/cigarettes/wypacket(new_human.back), WEAR_IN_BACK) - add_survivor_weapon_civilian(new_human) - - ..() - - -// ----- Interstellar Human Rights Survivor - -/datum/equipment_preset/survivor/interstellar_human_rights_observer - name = "Survivor - Interstellar Human Rights Observer" - assignment = "Interstellar Human Rights Observer(Colony)" - skills = /datum/skills/civilian/survivor - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_COMMAND) - -/datum/equipment_preset/survivor/interstellar_human_rights_observer/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/suspenders(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - add_random_cl_survivor_loot(new_human) - 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/head/helmet/marine(new_human), WEAR_HEAD) - add_survivor_weapon_civilian(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/document(new_human), WEAR_R_STORE) - - ..() - -/datum/equipment_preset/survivor/interstellar_human_rights_observer/soro - name = "Survivor - Sorokyne Interstellar Human Rights Observer" - assignment = "Interstellar Human Rights Observer(Sorokyne)" - - -/datum/equipment_preset/survivor/interstellar_human_rights_observer/soro/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) - - ..() - -// ----- WY Survivors - -/datum/equipment_preset/survivor/goon - name = "Survivor - Corporate Security Goon" - flags = EQUIPMENT_PRESET_START_OF_ROUND - assignment = JOB_WY_GOON - paygrade = "WEY-GOON" - idtype = /obj/item/card/id/silver/cl - skills = /datum/skills/civilian/survivor/goon - languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) - access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND, ACCESS_CIVILIAN_BRIG) - - survivor_variant = SECURITY_SURVIVOR - -/datum/equipment_preset/survivor/goon/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc/corporate, WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate, WEAR_JACKET) - 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/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) - - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88_near_empty, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) - - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41a/corporate/no_lock, WEAR_J_STORE) - - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/full(new_human), WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/survival/full(new_human), WEAR_L_STORE) - -/datum/equipment_preset/survivor/pmc - name = "Survivor - PMC" - flags = EQUIPMENT_PRESET_START_OF_ROUND - assignment = "Weyland-Yutani PMC" - faction = FACTION_SURVIVOR - faction_group = list(FACTION_SURVIVOR) - paygrade = "PMC-OP" - idtype = /obj/item/card/id/pmc - skills = /datum/skills/civilian/survivor/pmc - languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) - access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND) - -/datum/equipment_preset/survivor/pmc/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/pmc/hvh, WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc, WEAR_BODY) - add_pmc_survivor_weapon(new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc, WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf, WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) - - ..() - -/datum/equipment_preset/survivor/pmc/medic - name = "Survivor - PMC Medic" - assignment = JOB_PMC_MEDIC - rank = JOB_PMC_MEDIC - paygrade = "PMC-MS" - skills = /datum/skills/civilian/survivor/pmc/medic - -/datum/equipment_preset/survivor/pmc/medic/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human), WEAR_IN_BACK) - if(new_human.disabilities & NEARSIGHTED) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES) - else - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_R_HAND) - - ..() - -/datum/equipment_preset/survivor/pmc/engineer - name = "Survivor - PMC Engineer" - assignment = JOB_PMC_ENGINEER - rank = JOB_PMC_ENGINEER - paygrade = "PMC-TECH" - skills = /datum/skills/civilian/survivor/pmc/engineer - -/datum/equipment_preset/survivor/pmc/engineer/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding/superior, WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/med_small_stack(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_R_HAND) - - ..() - -/datum/equipment_preset/survivor/wy/manager - name = "Survivor - Corporate Supervisor" - flags = EQUIPMENT_PRESET_EXTRA - paygrade = "WYC7" - skills = /datum/skills/civilian/survivor/manager - assignment = "Colony Supervisor" - role_comm_title = "Supervisor" - idtype = /obj/item/card/id/silver/clearance_badge/manager - faction_group = list(FACTION_WY, FACTION_SURVIVOR) - access = list( - ACCESS_WY_GENERAL, - ACCESS_WY_COLONIAL, - ACCESS_WY_LEADERSHIP, - ACCESS_WY_SECURITY, - ACCESS_WY_EXEC, - ACCESS_WY_RESEARCH, - ACCESS_WY_ENGINEERING, - ACCESS_WY_MEDICAL, - ACCESS_ILLEGAL_PIRATE, - ) - languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) - - survivor_variant = CORPORATE_SURVIVOR - -/datum/equipment_preset/survivor/wy/manager/load_gear(mob/living/carbon/human/new_human) - - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/manager(new_human), WEAR_BODY) - if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) - add_ice_colony_survivor_equipment(new_human) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/lockable/liaison, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/manager(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/manager(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/paper/research_notes/good(new_human), WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/reagent_container/glass/beaker/vial/random/good(new_human), WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) - add_pmc_survivor_weapon(new_human) - add_random_cl_survivor_loot(new_human) - - ..() - -// ----- Mercenary Survivors - -/datum/equipment_preset/survivor/pmc/miner/one - name = "Survivor - Mercenary" - flags = EQUIPMENT_PRESET_START_OF_ROUND - - assignment = "Mercenary" - skills = /datum/skills/civilian/survivor/pmc - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/pmc/miner/one/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/mercenary/miner, WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/mercenary/miner, WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/mercenary/miner, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) - add_pmc_survivor_weapon(new_human) - - ..() - -/datum/equipment_preset/survivor/pmc/freelancer - name = "Survivor - Freelancer" - assignment = "Freelancer" - skills = /datum/skills/civilian/survivor/pmc - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list(ACCESS_CIVILIAN_PUBLIC) - -/datum/equipment_preset/survivor/pmc/freelancer/load_gear(mob/living/carbon/human/new_human) - - 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/shoes/marine/upp, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS) - spawn_merc_helmet(new_human) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/dutch, WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) - add_pmc_survivor_weapon(new_human) - - ..() - -// ----- Hostile Survivors - -/datum/equipment_preset/survivor/clf - name = "CLF Survivor" - flags = EQUIPMENT_PRESET_EXTRA - skills = /datum/skills/civilian/survivor/clf - languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) - faction = FACTION_CLF - faction_group = list(FACTION_CLF, FACTION_SURVIVOR) - access = list(ACCESS_CIVILIAN_PUBLIC) - survivor_variant = HOSTILE_SURVIVOR - -/datum/equipment_preset/survivor/clf/load_gear(mob/living/carbon/human/new_human) - - spawn_rebel_uniform(new_human) - spawn_rebel_suit(new_human) - spawn_rebel_helmet(new_human) - spawn_rebel_shoes(new_human) - spawn_rebel_gloves(new_human) - spawn_rebel_belt(new_human) - - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CLF(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/flashlight(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) - add_survivor_weapon_security(new_human) - add_survivor_weapon_pistol(new_human) - - ..() - -/datum/equipment_preset/survivor/clf/cold - -/datum/equipment_preset/survivor/clf/cold/spawn_rebel_suit(mob/living/carbon/human/human) - if(!istype(human)) - return - var/suitpath = pick( - /obj/item/clothing/suit/storage/militia, - /obj/item/clothing/suit/storage/militia/vest, - /obj/item/clothing/suit/storage/militia/brace, - /obj/item/clothing/suit/storage/militia/partial, - ) - human.equip_to_slot_or_del(new suitpath, WEAR_JACKET) - -/datum/equipment_preset/survivor/clf/cold/spawn_rebel_helmet(mob/living/carbon/human/human) - if(!istype(human)) - return - var/helmetpath = pick( - /obj/item/clothing/head/militia, - /obj/item/clothing/head/militia/bucket, - /obj/item/clothing/head/helmet, - /obj/item/clothing/head/helmet/skullcap, - /obj/item/clothing/head/helmet/swat, - ) - human.equip_to_slot_or_del(new helmetpath, WEAR_HEAD) - -/datum/equipment_preset/survivor/clf/cold/spawn_rebel_shoes(mob/living/carbon/human/human) - if(!istype(human)) - return - var/shoespath = /obj/item/clothing/shoes/combat - human.equip_to_slot_or_del(new shoespath, WEAR_FEET) - -/datum/equipment_preset/survivor/new_varadero/commander - name = "Survivor - USASF Commander" - assignment = "USASF Commander" - skills = /datum/skills/commander - paygrade = "NO5" - idtype = /obj/item/card/id/gold - role_comm_title = "USASF CDR" - flags = EQUIPMENT_PRESET_START_OF_ROUND - access = list( - ACCESS_CIVILIAN_PUBLIC, - ACCESS_CIVILIAN_RESEARCH, - ACCESS_CIVILIAN_ENGINEERING, - ACCESS_CIVILIAN_LOGISTICS, - ACCESS_CIVILIAN_BRIG, - ACCESS_CIVILIAN_MEDBAY, - ACCESS_CIVILIAN_COMMAND, - ) - -/datum/equipment_preset/survivor/new_varadero/commander/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY) - - var/obj/item/clothing/suit/storage/jacket/marine/service/suit = new() - suit.icon_state = "[suit.initial_icon_state]_o" - suit.buttoned = FALSE - - var/obj/item/clothing/accessory/ranks/navy/o5/pin = new() - suit.attach_accessory(new_human, pin) - - new_human.equip_to_slot_or_del(suit, WEAR_JACKET) - 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/device/radio/headset/distress(new_human), WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/survival/full(new_human), WEAR_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/notepad(new_human), WEAR_IN_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/tool/pen/fountain(new_human), WEAR_IN_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/m1911(new_human), WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap(new_human), WEAR_HEAD) - - ..() - -/datum/equipment_preset/survivor/upp - name = "Survivor - UPP" - paygrade = "UE1" - origin_override = ORIGIN_UPP - rank = JOB_SURVIVOR - skills = /datum/skills/military/survivor/upp_private - languages = list(LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_CHINESE) - faction = FACTION_UPP - faction_group = list(FACTION_UPP, FACTION_SURVIVOR) - role_comm_title = "UPP 173RD 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) - switch(random_number) - if(1) - uniform.roll_suit_jacket(new_human) - if(2) - uniform.roll_suit_sleeves(new_human) - new_human.equip_to_slot_or_del(uniform, WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp (new_human), WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp_knife(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare(new_human), WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/recon(new_human), WEAR_L_EAR) - -/datum/equipment_preset/survivor/upp/soldier - name = "Survivor - UPP Soldier" - paygrade = "UE2" - assignment = JOB_UPP - rank = JOB_UPP - skills = /datum/skills/military/survivor/upp_private - -/datum/equipment_preset/survivor/upp/soldier/load_gear(mob/living/carbon/human/new_human) - var/obj/item/clothing/under/marine/veteran/UPP/uniform = new() - var/random_number = rand(1,2) - switch(random_number) - if(1) - uniform.roll_suit_jacket(new_human) - if(2) - uniform.roll_suit_sleeves(new_human) - new_human.equip_to_slot_or_del(uniform, WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) - add_upp_weapon(new_human) - spawn_random_upp_headgear(new_human) - spawn_random_upp_armor(new_human) - spawn_random_upp_belt(new_human) - - ..() - -/datum/equipment_preset/survivor/upp/sapper - name = "Survivor - UPP Sapper" - paygrade = "UE3S" - assignment = JOB_UPP_ENGI - rank = JOB_UPP_ENGI - skills = /datum/skills/military/survivor/upp_sapper - -/datum/equipment_preset/survivor/upp/sapper/load_gear(mob/living/carbon/human/new_human) - - var/obj/item/clothing/under/marine/veteran/UPP/engi/uniform = new() - var/R = rand(1,2) - switch(R) - if(1) - uniform.roll_suit_jacket(new_human) - if(2) - uniform.roll_suit_sleeves(new_human) - new_human.equip_to_slot_or_del(uniform, WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) - spawn_random_upp_armor(new_human) - add_upp_weapon(new_human) - spawn_random_upp_headgear(new_human) - - ..() - -/datum/equipment_preset/survivor/upp/medic - name = "Survivor - UPP Medic" - paygrade = "UE3M" - assignment = JOB_UPP_MEDIC - rank = JOB_UPP_MEDIC - skills = /datum/skills/military/survivor/upp_medic - -/datum/equipment_preset/survivor/upp/medic/load_gear(mob/living/carbon/human/new_human) - var/obj/item/clothing/under/marine/veteran/UPP/medic/uniform = new() - var/random_number = rand(1,2) - switch(random_number) - if(1) - uniform.roll_suit_jacket(new_human) - if(2) - uniform.roll_suit_sleeves(new_human) - new_human.equip_to_slot_or_del(uniform, WEAR_BODY) - new_human.equip_to_slot_or_del(new/obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/partial(new_human), WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/medic/upp(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(new_human), WEAR_IN_BACK) - spawn_random_upp_armor(new_human) - add_upp_weapon(new_human) - spawn_random_upp_headgear(new_human) - - ..() - -/datum/equipment_preset/survivor/upp/specialist - name = "Survivor - UPP Specialist" - assignment = JOB_UPP_SPECIALIST - rank = JOB_UPP_SPECIALIST - paygrade = "UE4" - skills = /datum/skills/military/survivor/upp_spec - -/datum/equipment_preset/survivor/upp/specialist/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/UPP/heavy(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/heavy (new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer(new_human), WEAR_L_HAND) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73(new_human), WEAR_WAIST) - - ..() - -/datum/equipment_preset/survivor/upp/squad_leader - name = "Survivor - UPP Squad Leader" - paygrade = "UE5" - 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" - skills = /datum/skills/military/survivor/upp_sl - -/datum/equipment_preset/survivor/upp/squad_leader/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/officer (new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP (new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver(new_human), WEAR_WAIST) - add_upp_weapon(new_human) - - ..() diff --git a/code/modules/gear_presets/survivors/corsat/preset_corsat.dm b/code/modules/gear_presets/survivors/corsat/preset_corsat.dm new file mode 100644 index 000000000000..f71439b9d7ac --- /dev/null +++ b/code/modules/gear_presets/survivors/corsat/preset_corsat.dm @@ -0,0 +1,58 @@ +/datum/equipment_preset/survivor/security/corsat + name = "Survivor - CORSAT Security Guard" + assignment = "Weyland-Yutani Security Guard" + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) + +/datum/equipment_preset/survivor/security/corsat/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/formal/servicedress(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/prescription(new_human), WEAR_EYES) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/doctor/corsat + name = "Survivor - CORSAT Doctor" + assignment = "CORSAT Doctor" + +/datum/equipment_preset/survivor/doctor/corsat/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/green(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/green(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/scientist/corsat + name = "Survivor - CORSAT Researcher" + assignment = "CORSAT Researcher" + +/datum/equipment_preset/survivor/scientist/corsat/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/researcher(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/corsat + name = "Survivor - Interstellar Commerce Commission Liaison CORSAT" + assignment = "Interstellar Commerce Commission Corporate Liaison" + +/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/corsat/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/formal(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET) + ..() + +/datum/equipment_preset/survivor/engineer/corsat + name = "Survivor - Corsat Station Engineer" + assignment = "Corsat Station Engineer" + +/datum/equipment_preset/survivor/engineer/corsat/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/engi(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + 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/head/beret/marine/techofficer(new_human), WEAR_HEAD) + ..() diff --git a/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm b/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm new file mode 100644 index 000000000000..f0d812026491 --- /dev/null +++ b/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm @@ -0,0 +1,65 @@ + +/datum/equipment_preset/survivor/scientist/florina + name = "Survivor - Florina Researcher" + assignment = "Florina Researcher" + +/datum/equipment_preset/survivor/scientist/florina/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/purple(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/chem(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(new_human), WEAR_FEET) + ..() + + +/datum/equipment_preset/survivor/doctor/florina + name = "Survivor - Florina Doctor" + assignment = "Florina Doctor" + +/datum/equipment_preset/survivor/doctor/florina/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/security/florina + name = "Survivor - Florina Prison Guard" + assignment = "Florina Prison Guard" + +/datum/equipment_preset/survivor/security/florina/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/colonial_marshal/florina + name = "Survivor - United Americas Riot Officer" + assignment = "United Americas Riot Officer" + +/datum/equipment_preset/survivor/colonial_marshal/florina/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/ua_riot(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/ua_riot(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/prop/helmetgarb/riot_shield(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + + ..() + +/datum/equipment_preset/survivor/engineer/florina + name = "Survivor - Florina Engineer" + assignment = "Florina Engineer" + +/datum/equipment_preset/survivor/engineer/florina/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/white(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron/overalls(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) + ..() diff --git a/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm b/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm new file mode 100644 index 000000000000..8a9161f1802a --- /dev/null +++ b/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm @@ -0,0 +1,76 @@ +/datum/equipment_preset/survivor/engineer/kutjevo + name = "Survivor - Kutjevo Engineer" + assignment = "Kutjevo Engineer" + +/datum/equipment_preset/survivor/engineer/kutjevo/load_gear(mob/living/carbon/human/new_human) + add_random_kutjevo_survivor_uniform(new_human) + add_random_kutjevo_survivor_equipment(new_human) + 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/black(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + ..() + +/datum/equipment_preset/survivor/chaplain/kutjevo + name = "Survivor - Kutjevo Chaplain" + assignment = "Kutjevo Chaplain" + +/datum/equipment_preset/survivor/chaplain/kutjevo/load_gear(mob/living/carbon/human/new_human) + add_random_kutjevo_survivor_uniform(new_human) + add_random_kutjevo_survivor_equipment(new_human) + 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/black(new_human), WEAR_HANDS) + + ..() + +/datum/equipment_preset/survivor/security/kutjevo + name = "Survivor - Kutjevo Security Guard" + assignment = "Kutjevo Security Guard" + + +/datum/equipment_preset/survivor/security/kutjevo/load_gear(mob/living/carbon/human/new_human) + add_random_kutjevo_survivor_uniform(new_human) + add_random_kutjevo_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + 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/black(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/doctor/kutjevo + name = "Survivor - Kutjevo Doctor" + assignment = "Kutjevo Doctor" + +/datum/equipment_preset/survivor/doctor/kutjevo/load_gear(mob/living/carbon/human/new_human) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) + add_random_kutjevo_survivor_uniform(new_human) + add_random_kutjevo_survivor_equipment(new_human) + 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/black(new_human), WEAR_HANDS) + ..() + +/datum/equipment_preset/survivor/colonial_marshal/kutjevo + name = "Survivor - Kutjevo Colonial Marshal Deputy" + assignment = "CMB Deputy" + +/datum/equipment_preset/survivor/colonial_marshal/kutjevo/load_gear(mob/living/carbon/human/new_human) + add_random_kutjevo_survivor_uniform(new_human) + add_random_kutjevo_survivor_equipment(new_human) + 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/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) + ..() + +/datum/equipment_preset/survivor/trucker/kutjevo + name = "Survivor - Kutjevo Heavy Vehicle Operator" + assignment = "Kutjevo Heavy Vehicle Operator" + +/datum/equipment_preset/survivor/trucker/kutjevo/load_gear(mob/living/carbon/human/new_human) + add_random_kutjevo_survivor_uniform(new_human) + add_random_kutjevo_survivor_equipment(new_human) + 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/black(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + + ..() diff --git a/code/modules/gear_presets/forcon_survivors.dm b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm similarity index 100% rename from code/modules/gear_presets/forcon_survivors.dm rename to code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm diff --git a/code/modules/gear_presets/survivors/lv_624/clfship_insert_lv624.dm b/code/modules/gear_presets/survivors/lv_624/clfship_insert_lv624.dm new file mode 100644 index 000000000000..1bfeaaad9c43 --- /dev/null +++ b/code/modules/gear_presets/survivors/lv_624/clfship_insert_lv624.dm @@ -0,0 +1,30 @@ +// /obj/effect/landmark/survivor_spawner/lv624_crashed_clf +// clfship.dmm +/datum/equipment_preset/survivor/clf + name = "CLF Survivor" + flags = EQUIPMENT_PRESET_EXTRA + skills = /datum/skills/civilian/survivor/clf + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) + faction = FACTION_CLF + faction_group = list(FACTION_CLF, FACTION_SURVIVOR) + access = list(ACCESS_CIVILIAN_PUBLIC) + survivor_variant = HOSTILE_SURVIVOR + +/datum/equipment_preset/survivor/clf/load_gear(mob/living/carbon/human/new_human) + + spawn_rebel_uniform(new_human) + spawn_rebel_suit(new_human) + spawn_rebel_helmet(new_human) + spawn_rebel_shoes(new_human) + spawn_rebel_gloves(new_human) + spawn_rebel_belt(new_human) + + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CLF(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/flashlight(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) + add_survivor_weapon_security(new_human) + add_survivor_weapon_pistol(new_human) + + ..() diff --git a/code/modules/gear_presets/survivors/lv_624/preset_lv.dm b/code/modules/gear_presets/survivors/lv_624/preset_lv.dm new file mode 100644 index 000000000000..a2e55b899c9b --- /dev/null +++ b/code/modules/gear_presets/survivors/lv_624/preset_lv.dm @@ -0,0 +1,83 @@ +/datum/equipment_preset/survivor/scientist/lv + name = "Survivor - LV-624 Archeologist" + assignment = "LV-624 Archeologist" + +/datum/equipment_preset/survivor/scientist/lv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/researcher(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/colonial_marshal/lv + name = "Survivor - LV-624 Head of Security" + assignment = "LV-624 Head of Security" + +/datum/equipment_preset/survivor/colonial_marshal/lv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security/navyblue(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/sec/hos(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/trucker/lv + name = "Survivor - LV-624 Cargo Technician" + assignment = "LV-624 Cargo Technician" + +/datum/equipment_preset/survivor/trucker/lv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/yellow(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + ..() + +/datum/equipment_preset/survivor/engineer/lv + name = "Survivor - LV-624 Engineer" + assignment = "LV-624 Engineer" + +/datum/equipment_preset/survivor/engineer/lv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/dispatch(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/chaplain/lv + name = "Survivor - LV-624 Priest" + assignment = "LV-624 Priest" + +/datum/equipment_preset/survivor/chaplain/lv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/priest_robe(new_human), WEAR_JACKET) + ..() + +/datum/equipment_preset/survivor/doctor/lv + name = "Survivor - LV-624 Emergency Medical Technician" + assignment = "LV-624 Emergency Medical Technician" + +/datum/equipment_preset/survivor/doctor/lv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human.back), WEAR_IN_BACK) + ..() + +/datum/equipment_preset/survivor/security/lv + name = "Survivor - LV-624 Security Guard" + assignment = "Weyland-Yutani Security Guard" + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) + +/datum/equipment_preset/survivor/security/lv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/formal/servicedress(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/jungle(new_human), WEAR_FEET) + ..() + diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm new file mode 100644 index 000000000000..3beba6a31b06 --- /dev/null +++ b/code/modules/gear_presets/survivors/misc.dm @@ -0,0 +1,344 @@ + + +/* +everything bellow isn't used or out of place. + +*/ + + +// ----- Prisioner Survivors +// after double check prisoner isn't being used anywhere. +/datum/equipment_preset/survivor/prisoner + name = "Survivor - Prisoner" + assignment = "Prisoner" + skills = /datum/skills/civilian/survivor/prisoner + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + + survivor_variant = SECURITY_SURVIVOR + +/datum/equipment_preset/survivor/prisoner/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + if(prob(50)) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(new_human), WEAR_HEAD) + if(prob(50)) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human.back), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE) + add_survivor_weapon_civilian(new_human) + ..() + +// after double check gangleader isn't being used anywhere. +/datum/equipment_preset/survivor/gangleader + name = "Survivor - Gang Leader" + assignment = "Gang Leader" + skills = /datum/skills/civilian/survivor/gangleader + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/gangleader/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + if(prob(50)) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(new_human), WEAR_HEAD) + if(prob(50)) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human.back), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE) + add_survivor_weapon_civilian(new_human) + ..() + +// ----- Civilian Survivor + +// after double check civilian isn't being used anywhere. +/datum/equipment_preset/survivor/civilian + name = "Survivor - Civilian" + assignment = "Civilian" + skills = /datum/skills/civilian/survivor + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/civilian/load_gear(mob/living/carbon/human/new_human) + var/random_gear = rand(0, 3) + switch(random_gear) + if(0) // Normal Colonist + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) + if(1) // Janitor + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/vir(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/mgoggles(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/purple(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/galoshes(new_human), WEAR_FEET) + if(2) // Bar Tender + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/waiter(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/lawyer/bluejacket(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/bowlerhat(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/fake_mustache(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/black(new_human), WEAR_HANDS) + 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/storage/beer_pack(new_human.back), WEAR_IN_BACK) + if(3) // Botanist + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/hyd(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(new_human), WEAR_JACKET) + 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/tool/hatchet(new_human.back), WEAR_IN_BACK) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general(new_human), WEAR_R_STORE) + add_survivor_weapon_civilian(new_human) + + ..() + +// --- Salesman Survivor + +// after double check salesman isn't being used anywhere. +/datum/equipment_preset/survivor/salesman + name = "Survivor - Salesman" + assignment = "Salesman" + skills = /datum/skills/civilian/survivor + flags = EQUIPMENT_PRESET_START_OF_ROUND + idtype = /obj/item/card/id/data + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/salesman/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/wcoat(new_human), WEAR_JACKET) + 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/storage/pouch/document(new_human), WEAR_R_STORE) + add_random_cl_survivor_loot(new_human) + add_survivor_weapon_civilian(new_human) + ..() + + +// ----- Roughneck Survivor + +// after double check roughneck isn't being used anywhere. +/datum/equipment_preset/survivor/roughneck + name = "Survivor - Roughneck" + assignment = "Roughneck" + skills = /datum/skills/civilian/survivor/pmc + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/roughneck/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/white(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron/overalls(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/centcom(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/centcom(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large(new_human), WEAR_R_STORE) + add_pmc_survivor_weapon(new_human) + + ..() + +// ----- Bum Survivor + +// after double check beachbum isn't being used anywhere. +/datum/equipment_preset/survivor/beachbum + name = "Survivor - Beach Bum" + assignment = "Beach Bum" + skills = /datum/skills/civilian/survivor/prisoner + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/beachbum/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/shorts/red(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/botanic_leather(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/beer_pack(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/kitchen/knife/butcher(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/fancy/cigarettes/wypacket(new_human.back), WEAR_IN_BACK) + add_survivor_weapon_civilian(new_human) + + ..() + +// ----- WY Survivors + +// after double check goon isn't being used anywhere. +/datum/equipment_preset/survivor/goon + name = "Survivor - Corporate Security Goon" + flags = EQUIPMENT_PRESET_START_OF_ROUND + assignment = JOB_WY_GOON + paygrade = "WEY-GOON" + idtype = /obj/item/card/id/silver/cl + skills = /datum/skills/civilian/survivor/goon + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) + access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND, ACCESS_CIVILIAN_BRIG) + + survivor_variant = SECURITY_SURVIVOR + +/datum/equipment_preset/survivor/goon/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc/corporate, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate, WEAR_JACKET) + 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/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) + + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88_near_empty, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41a/corporate/no_lock, WEAR_J_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/full(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/survival/full(new_human), WEAR_L_STORE) + + +// ----- Mercenary Survivors + +// after double check pmc/miner/one isn't being used anywhere. +/datum/equipment_preset/survivor/pmc/miner/one + name = "Survivor - Mercenary" + flags = EQUIPMENT_PRESET_START_OF_ROUND + + assignment = "Mercenary" + skills = /datum/skills/civilian/survivor/pmc + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/pmc/miner/one/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/mercenary/miner, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/mercenary/miner, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/mercenary/miner, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) + add_pmc_survivor_weapon(new_human) + + ..() + +// after double check pmc/freelancer isn't being used anywhere. +/datum/equipment_preset/survivor/pmc/freelancer + name = "Survivor - Freelancer" + assignment = "Freelancer" + skills = /datum/skills/civilian/survivor/pmc + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/pmc/freelancer/load_gear(mob/living/carbon/human/new_human) + + 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/shoes/marine/upp, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS) + spawn_merc_helmet(new_human) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/dutch, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) + add_pmc_survivor_weapon(new_human) + + ..() + +// after double check /new_varadero/commander isn't being used anywhere. +/datum/equipment_preset/survivor/new_varadero/commander + name = "Survivor - USASF Commander" + assignment = "USASF Commander" + skills = /datum/skills/commander + paygrade = "NO5" + idtype = /obj/item/card/id/gold + role_comm_title = "USASF CDR" + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list( + ACCESS_CIVILIAN_PUBLIC, + ACCESS_CIVILIAN_RESEARCH, + ACCESS_CIVILIAN_ENGINEERING, + ACCESS_CIVILIAN_LOGISTICS, + ACCESS_CIVILIAN_BRIG, + ACCESS_CIVILIAN_MEDBAY, + ACCESS_CIVILIAN_COMMAND, + ) + +/datum/equipment_preset/survivor/new_varadero/commander/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY) + + var/obj/item/clothing/suit/storage/jacket/marine/service/suit = new() + suit.icon_state = "[suit.initial_icon_state]_o" + suit.buttoned = FALSE + + var/obj/item/clothing/accessory/ranks/navy/o5/pin = new() + suit.attach_accessory(new_human, pin) + + new_human.equip_to_slot_or_del(suit, WEAR_JACKET) + 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/device/radio/headset/distress(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/survival/full(new_human), WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/notepad(new_human), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/pen/fountain(new_human), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/m1911(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap(new_human), WEAR_HEAD) + + ..() + +// ----- Hostile Survivors + +/* + +datum/equipment_preset/survivor/clf/cold is never used +and as a three proc attach to it that are defacto never used eitheir. + +handled proc in datum/equipment_preset/survivor/clf/cold: +spawn_rebel_suit +spawn_rebel_helmet +spawn_rebel_shoes + +*/ + +/datum/equipment_preset/survivor/clf/cold + +//children of spawn rebel shoes proc +/datum/equipment_preset/survivor/clf/cold/spawn_rebel_suit(mob/living/carbon/human/human) + if(!istype(human)) + return + var/suitpath = pick( + /obj/item/clothing/suit/storage/militia, + /obj/item/clothing/suit/storage/militia/vest, + /obj/item/clothing/suit/storage/militia/brace, + /obj/item/clothing/suit/storage/militia/partial, + ) + human.equip_to_slot_or_del(new suitpath, WEAR_JACKET) + +//children of spawn rebel helmet proc +/datum/equipment_preset/survivor/clf/cold/spawn_rebel_helmet(mob/living/carbon/human/human) + if(!istype(human)) + return + var/helmetpath = pick( + /obj/item/clothing/head/militia, + /obj/item/clothing/head/militia/bucket, + /obj/item/clothing/head/helmet, + /obj/item/clothing/head/helmet/skullcap, + /obj/item/clothing/head/helmet/swat, + ) + human.equip_to_slot_or_del(new helmetpath, WEAR_HEAD) + +//children of spawn rebel shoes proc +/datum/equipment_preset/survivor/clf/cold/spawn_rebel_shoes(mob/living/carbon/human/human) + if(!istype(human)) + return + var/shoespath = /obj/item/clothing/shoes/combat + human.equip_to_slot_or_del(new shoespath, WEAR_FEET) diff --git a/code/modules/gear_presets/survivors/new_varadero/preset_new_varadero.dm b/code/modules/gear_presets/survivors/new_varadero/preset_new_varadero.dm new file mode 100644 index 000000000000..f9af043aac62 --- /dev/null +++ b/code/modules/gear_presets/survivors/new_varadero/preset_new_varadero.dm @@ -0,0 +1,86 @@ +/datum/equipment_preset/survivor/security/nv + name = "Survivor - New Varadero Security Guard" + assignment = "United Americas Peacekeeper" + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) + +/datum/equipment_preset/survivor/security/nv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/ua_riot(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/doctor/nv + name = "Survivor - New Varadero Medical Technician" + assignment = "New Varadero Medical Technician" + +/datum/equipment_preset/survivor/doctor/nv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/scientist/nv + name = "Survivor - New Varadero Researcher" + assignment = "New Varadero Researcher" + +/datum/equipment_preset/survivor/scientist/nv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/chem(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/purple(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/nv + name = "Survivor - Interstellar Commerce Commission Liaison New Varadero" + assignment = "Interstellar Commerce Commission Corporate Liaison" + +/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/nv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/formal(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest/black(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/flashlight, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/clipboard, WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses, WEAR_EYES) + ..() + +/datum/equipment_preset/survivor/trucker/nv + name = "Survivor - New Varadero Vehicle Operator" + assignment = "New Varadero Vehicle Operator" + +/datum/equipment_preset/survivor/trucker/nv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(new_human), WEAR_EYES) + 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/head/cmcap/boonie(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + ..() + +/datum/equipment_preset/survivor/engineer/nv + name = "Survivor - New Varadero Technician" + assignment = "New Varadero Engineer" + +/datum/equipment_preset/survivor/engineer/nv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/dispatch(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + 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/head/hardhat/orange(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/chaplain/nv + name = "Survivor - New Varadero Priest" + assignment = "New Varadero Priest" + +/datum/equipment_preset/survivor/chaplain/nv/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/priest_robe(new_human), WEAR_JACKET) + ..() diff --git a/code/modules/gear_presets/survivors/shivas_snowball/preset_shivas_snowball.dm b/code/modules/gear_presets/survivors/shivas_snowball/preset_shivas_snowball.dm new file mode 100644 index 000000000000..c1dce212d0c4 --- /dev/null +++ b/code/modules/gear_presets/survivors/shivas_snowball/preset_shivas_snowball.dm @@ -0,0 +1,82 @@ +/datum/equipment_preset/survivor/corporate/shiva + name = "Survivor - Shivas Snowball Corporate Liaison" + assignment = "Shivas Snowball Corporate Liaison" + +/datum/equipment_preset/survivor/corporate/shiva/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/formal(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + 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/white(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/navy(new_human), WEAR_JACKET) + ..() + +/datum/equipment_preset/survivor/doctor/shiva + name = "Survivor - Shivas Snowball Doctor" + assignment = "Shivas Snowball Doctor" + +/datum/equipment_preset/survivor/doctor/shiva/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/green(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/green(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + 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/white(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + ..() + +/datum/equipment_preset/survivor/scientist/shiva + name = "Survivor - Shivas Snowball Researcher" + assignment = "Shivas Snowball Researcher" + +/datum/equipment_preset/survivor/scientist/shiva/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/tox(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/purple(new_human), WEAR_JACKET) + ..() + +/datum/equipment_preset/survivor/colonial_marshal/shiva + name = "Survivor - Shivas Colonial Marshal Deputy" + assignment = "CMB Deputy" + +/datum/equipment_preset/survivor/colonial_marshal/shiva/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security/corp(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/red(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/engineer/shiva + name = "Survivor - Shivas Snowball Engineer" + assignment = "Shivas Snowball Engineer" + +/datum/equipment_preset/survivor/engineer/shiva/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor/parka/yellow(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/security/shiva + name = "Survivor - Shivas Snowball Security Guard" + assignment = "United Americas Peacekeeper" + +/datum/equipment_preset/survivor/security/shiva/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/ua_riot(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() diff --git a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm new file mode 100644 index 000000000000..c5c85a0a7441 --- /dev/null +++ b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm @@ -0,0 +1,158 @@ +//those preset are only used on this insert. +// /obj/effect/landmark/survivor_spawner/bigred_crashed_pmc + +/datum/equipment_preset/survivor/pmc + name = "Survivor - PMC" + flags = EQUIPMENT_PRESET_START_OF_ROUND + assignment = "Weyland-Yutani PMC" + faction = FACTION_SURVIVOR + faction_group = list(FACTION_SURVIVOR) + paygrade = "PMC-OP" + idtype = /obj/item/card/id/pmc + skills = /datum/skills/civilian/survivor/pmc + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) + access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND) + +/datum/equipment_preset/survivor/pmc/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/pmc/hvh, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc, WEAR_BODY) + add_pmc_survivor_weapon(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) + + ..() +// /obj/effect/landmark/survivor_spawner/bigred_crashed_pmc_medic + +/datum/equipment_preset/survivor/pmc/medic + name = "Survivor - PMC Medic" + assignment = JOB_PMC_MEDIC + rank = JOB_PMC_MEDIC + paygrade = "PMC-MS" + skills = /datum/skills/civilian/survivor/pmc/medic + +/datum/equipment_preset/survivor/pmc/medic/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human), WEAR_IN_BACK) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_R_HAND) + + ..() +// /obj/effect/landmark/survivor_spawner/bigred_crashed_pmc_engineer + +/datum/equipment_preset/survivor/pmc/engineer + name = "Survivor - PMC Engineer" + assignment = JOB_PMC_ENGINEER + rank = JOB_PMC_ENGINEER + paygrade = "PMC-TECH" + skills = /datum/skills/civilian/survivor/pmc/engineer + +/datum/equipment_preset/survivor/pmc/engineer/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding/superior, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/med_small_stack(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_R_HAND) + + ..() + +// /obj/effect/landmark/survivor_spawner/bigred_crashed_cl + +/datum/equipment_preset/survivor/wy/manager + name = "Survivor - Corporate Supervisor" + flags = EQUIPMENT_PRESET_EXTRA + paygrade = "WYC7" + skills = /datum/skills/civilian/survivor/manager + assignment = "Colony Supervisor" + role_comm_title = "Supervisor" + idtype = /obj/item/card/id/silver/clearance_badge/manager + faction_group = list(FACTION_WY, FACTION_SURVIVOR) + access = list( + ACCESS_WY_GENERAL, + ACCESS_WY_COLONIAL, + ACCESS_WY_LEADERSHIP, + ACCESS_WY_SECURITY, + ACCESS_WY_EXEC, + ACCESS_WY_RESEARCH, + ACCESS_WY_ENGINEERING, + ACCESS_WY_MEDICAL, + ACCESS_ILLEGAL_PIRATE, + ) + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) + + survivor_variant = CORPORATE_SURVIVOR + +/datum/equipment_preset/survivor/wy/manager/load_gear(mob/living/carbon/human/new_human) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/manager(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/lockable/liaison, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/manager(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/manager(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/paper/research_notes/good(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/glass/beaker/vial/random/good(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE) + add_pmc_survivor_weapon(new_human) + add_random_cl_survivor_loot(new_human) + + ..() +// only used on the spawner of all of those above... +/datum/equipment_preset/synth/survivor/pmc + name = "Survivor - Synthetic - PMC Support Synth" + faction = FACTION_SURVIVOR + faction_group = list(FACTION_SURVIVOR) + access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND) + idtype = /obj/item/card/id/pmc + assignment = JOB_PMC_SYNTH + rank = JOB_PMC_SYNTH + role_comm_title = "WY Syn" + +/datum/equipment_preset/synth/survivor/pmc/load_race(mob/living/carbon/human/new_human) + new_human.set_species(SYNTH_GEN_THREE) + +/datum/equipment_preset/synth/survivor/pmc/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/surg_vest/equipped, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/telebaton, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/pmc/command/hvh, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/experimental_mesons, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc, WEAR_FACE) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET) + + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/smartpack/white, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crew_monitor, WEAR_IN_BACK) + + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/dutch, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/nailgun/compact, WEAR_J_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/wrench, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full_barbed_wire, WEAR_R_STORE) diff --git a/code/modules/gear_presets/survivors/solaris/preset_solaris.dm b/code/modules/gear_presets/survivors/solaris/preset_solaris.dm new file mode 100644 index 000000000000..c71641a82ac1 --- /dev/null +++ b/code/modules/gear_presets/survivors/solaris/preset_solaris.dm @@ -0,0 +1,94 @@ +/datum/equipment_preset/survivor/trucker/solaris + name = "Survivor - Solaris Heavy Vehicle Operator" + assignment = "Solaris Heavy Vehicle Operator" + skills = /datum/skills/civilian/survivor/trucker + +/datum/equipment_preset/survivor/trucker/solaris/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/worker_overalls(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron/overalls(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/red(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/big(new_human), WEAR_EYES) + ..() + +/datum/equipment_preset/survivor/colonial_marshal/solaris + name = "Survivor - Solaris Colonial Marshal Deputy" + assignment = "CMB Deputy" + + +/datum/equipment_preset/survivor/colonial_marshal/solaris/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/engineer/solaris + name = "Survivor - Solaris Engineer" + assignment = "Solaris Engineer" + +/datum/equipment_preset/survivor/engineer/solaris/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/yellow(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding/superior(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + ..() + +/datum/equipment_preset/survivor/scientist/solaris + name = "Survivor - Solaris Scientist" + assignment = "Solaris Scientist" + +/datum/equipment_preset/survivor/scientist/solaris/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/green(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/virologist(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/green(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/green(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/doctor/solaris + name = "Survivor - Solaris Doctor" + assignment = "Solaris Doctor" + +/datum/equipment_preset/survivor/doctor/solaris/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/purple(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/chaplain/solaris + name = "Survivor - Solaris Chaplain" + assignment = "Solaris Chaplain" + +/datum/equipment_preset/survivor/chaplain/solaris/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/holidaypriest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/nun_hood(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/security/solaris + name = "Survivor - Solaris United Americas Peacekeepers" + assignment = "United Americas Peacekeeper" + +/datum/equipment_preset/survivor/security/solaris/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/sec/hos(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/corporate/solaris + name = "Survivor - Solaris Ridge Corporate Liaison" + assignment = "Solaris Ridge Corporate Liaison" + +/datum/equipment_preset/survivor/corporate/solaris/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/outing/red(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/prescription(new_human), WEAR_EYES) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() diff --git a/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm b/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm new file mode 100644 index 000000000000..532b422a13a9 --- /dev/null +++ b/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm @@ -0,0 +1,60 @@ +/datum/equipment_preset/survivor/engineer/soro + name = "Survivor - Sorokyne Strata Political Prisioner" + assignment = "Sorokyne Strata Political Prisioner" + +/datum/equipment_preset/survivor/engineer/soro/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/soviet(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + ..() + +/datum/equipment_preset/survivor/security/soro + name = "Survivor - Sorokyne Strata Security" + assignment = "Sorokyne Strata Security" + +/datum/equipment_preset/survivor/security/soro/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/veteran/soviet_uniform_01(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/soviet(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + ..() + +/datum/equipment_preset/survivor/doctor/soro + name = "Survivor - Sorokyne Strata Doctor" + assignment = "Sorokyne Strata Doctor" + +/datum/equipment_preset/survivor/doctor/soro/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/veteran/soviet_uniform_01(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/scientist/soro + name = "Survivor - Sorokyne Strata Researcher" + assignment = "Sorokyne Strata Researcher" + +/datum/equipment_preset/survivor/scientist/soro/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/tox(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) + ..() + +/datum/equipment_preset/survivor/interstellar_human_rights_observer/soro + name = "Survivor - Sorokyne Interstellar Human Rights Observer" + assignment = "Interstellar Human Rights Observer(Sorokyne)" + + +/datum/equipment_preset/survivor/interstellar_human_rights_observer/soro/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + ..() diff --git a/code/modules/gear_presets/survivors/survivors.dm b/code/modules/gear_presets/survivors/survivors.dm new file mode 100644 index 000000000000..6d7036635b1c --- /dev/null +++ b/code/modules/gear_presets/survivors/survivors.dm @@ -0,0 +1,439 @@ +/datum/equipment_preset/survivor + name = JOB_SURVIVOR + assignment = JOB_SURVIVOR + rank = JOB_SURVIVOR + + skills = /datum/skills/civilian/survivor + languages = list(LANGUAGE_ENGLISH) + paygrade = "C" + idtype = /obj/item/card/id/lanyard + faction = FACTION_SURVIVOR + faction_group = list(FACTION_SURVIVOR) + origin_override = ORIGIN_CIVILIAN + + access = list(ACCESS_CIVILIAN_PUBLIC) + + minimap_icon = "surv" + minimap_background = MINIMAP_ICON_BACKGROUND_CIVILIAN + + var/survivor_variant = CIVILIAN_SURVIVOR + +/datum/equipment_preset/survivor/load_name(mob/living/carbon/human/new_human, randomise) + new_human.gender = pick(MALE, FEMALE) + var/datum/preferences/A = new + A.randomize_appearance(new_human) + var/random_name = capitalize(pick(new_human.gender == MALE ? first_names_male : first_names_female)) + " " + capitalize(pick(last_names)) + new_human.change_real_name(new_human, random_name) + new_human.age = rand(21,45) + +/datum/equipment_preset/survivor/load_gear(mob/living/carbon/human/new_human) // Essentially where you will put the most essential piece of kit you want survivors to spawn with. + add_random_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/survival/full(new_human), WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) + add_survivor_weapon_pistol(new_human) + +/datum/equipment_preset/survivor/load_id(mob/living/carbon/human/new_human, client/mob_client) + var/obj/item/clothing/under/uniform = new_human.w_uniform + if(istype(uniform)) + uniform.has_sensor = UNIFORM_HAS_SENSORS + uniform.sensor_faction = FACTION_COLONIST + return ..() + +/* +From map_config.dm + +Standart Survivors : /datum/equipment_preset/survivor/scientist, + /datum/equipment_preset/survivor/doctor, + /datum/equipment_preset/survivor/chef, + /datum/equipment_preset/survivor/chaplain, + /datum/equipment_preset/survivor/miner, + /datum/equipment_preset/survivor/colonial_marshal, + /datum/equipment_preset/survivor/engineer, + +*/ + + +// 1 ----- Scientist Survivor + +/datum/equipment_preset/survivor/scientist + name = "Survivor - Scientist" + assignment = "Scientist" + skills = /datum/skills/civilian/survivor/scientist + flags = EQUIPMENT_PRESET_START_OF_ROUND + idtype = /obj/item/card/id/silver/clearance_badge/scientist + access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_MEDBAY) + + survivor_variant = SCIENTIST_SURVIVOR + +/datum/equipment_preset/survivor/scientist/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/green(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/virologist(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/green(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/chem(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/green(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/paper/research_notes/good(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/glass/beaker/vial/random/good(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical/full(new_human), WEAR_R_STORE) + add_survivor_weapon_civilian(new_human) + add_random_survivor_research_gear(new_human) + + ..() + +// 2 ----- Doctor Survivor + +/datum/equipment_preset/survivor/doctor + name = "Survivor - Doctor" + assignment = "Doctor" + skills = /datum/skills/civilian/survivor/doctor + flags = EQUIPMENT_PRESET_START_OF_ROUND + idtype = /obj/item/card/id/silver/clearance_badge + access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_MEDBAY, ACCESS_CIVILIAN_COMMAND) + + survivor_variant = MEDICAL_SURVIVOR + +/datum/equipment_preset/survivor/doctor/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/med(new_human), WEAR_BACK) + 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/latex(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(new_human), WEAR_JACKET) + var/random_gear = rand(0,4) + switch(random_gear) + if(0) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_R_STORE) + if(1) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical/full(new_human), WEAR_R_STORE) + if(2) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE) + if(3) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/first_responder/full(new_human), WEAR_R_STORE) + if(4) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medkit/full_advanced(new_human), WEAR_R_STORE) + add_random_survivor_medical_gear(new_human) + add_survivor_weapon_civilian(new_human) + + ..() + +// 3 ----- Chef Survivor + +/datum/equipment_preset/survivor/chef + name = "Survivor - Chef" + assignment = "Chef" + skills = /datum/skills/civilian/survivor/chef + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/chef/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(new_human), WEAR_JACKET) + 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/tool/kitchen/rollingpin(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general(new_human), WEAR_R_STORE) + add_survivor_weapon_civilian(new_human) + + ..() + +// 4 ----- Chaplain Survivor + +/datum/equipment_preset/survivor/chaplain + name = "Survivor - Chaplain" + assignment = "Chaplain" + skills = /datum/skills/civilian/survivor/chaplain + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC) + +/datum/equipment_preset/survivor/chaplain/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/holidaypriest(new_human), WEAR_JACKET) + 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/storage/bible/booze(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general(new_human), WEAR_R_STORE) + add_survivor_weapon_civilian(new_human) + + ..() + +// 5 ----- Miner Survivor + +/datum/equipment_preset/survivor/miner + name = "Survivor - Miner" + assignment = "Miner" + skills = /datum/skills/civilian/survivor/miner + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS) + +/datum/equipment_preset/survivor/miner/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK) + 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/tool/pickaxe(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/flashlight/lantern(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/full(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) + add_survivor_weapon_civilian(new_human) + + ..() + +// 6 ---- Colonial Marshal Survivor + +/datum/equipment_preset/survivor/colonial_marshal + name = "Survivor - Colonial Marshal Deputy" + assignment = "CMB Deputy" + paygrade = "GS-9" + skills = /datum/skills/civilian/survivor/marshal + flags = EQUIPMENT_PRESET_START_OF_ROUND + idtype = /obj/item/card/id/deputy + role_comm_title = "CMB DEP" + access = list( + ACCESS_CIVILIAN_PUBLIC, + ACCESS_CIVILIAN_RESEARCH, + ACCESS_CIVILIAN_ENGINEERING, + ACCESS_CIVILIAN_LOGISTICS, + ACCESS_CIVILIAN_BRIG, + ACCESS_CIVILIAN_MEDBAY, + ACCESS_CIVILIAN_COMMAND, + ) + + survivor_variant = SECURITY_SURVIVOR + +/datum/equipment_preset/survivor/colonial_marshal/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) + + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB(new_human), WEAR_HEAD) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/prescription(new_human), WEAR_EYES) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/CMB(new_human), WEAR_JACKET) + 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/storage/pouch/magazine/large(new_human), WEAR_R_STORE) + add_survivor_weapon_security(new_human) + + ..() + +// 7 ----- Engineering Survivor + +/datum/equipment_preset/survivor/engineer + name = "Survivor - Engineer" + assignment = "Engineer" + skills = /datum/skills/civilian/survivor/engineer + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_ENGINEERING,ACCESS_CIVILIAN_LOGISTICS) + + survivor_variant = ENGINEERING_SURVIVOR + +/datum/equipment_preset/survivor/engineer/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/med_small_stack(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS) + 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/storage/belt/utility/full(new_human), WEAR_WAIST) + add_survivor_weapon_civilian(new_human) + + ..() +/* +Everything bellow is a parent used as a base for one or multiple maps. +*/ + +// ----- Interstellar Human Rights Survivor + +// it's used as a base for soro map. +/datum/equipment_preset/survivor/interstellar_human_rights_observer + name = "Survivor - Interstellar Human Rights Observer" + assignment = "Interstellar Human Rights Observer(Colony)" + skills = /datum/skills/civilian/survivor + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_COMMAND) + +/datum/equipment_preset/survivor/interstellar_human_rights_observer/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/suspenders(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + add_random_cl_survivor_loot(new_human) + 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/head/helmet/marine(new_human), WEAR_HEAD) + add_survivor_weapon_civilian(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/document(new_human), WEAR_R_STORE) + + ..() + + +// ----- CL Survivor +//used as a base for shiva and solaris spawn. + +/datum/equipment_preset/survivor/corporate + name = "Survivor - Corporate Liaison" + assignment = "Corporate Liaison" + skills = /datum/skills/civilian/survivor + flags = EQUIPMENT_PRESET_START_OF_ROUND + paygrade = "WYC2" + idtype = /obj/item/card/id/silver/clearance_badge/cl + access = list( + ACCESS_CIVILIAN_PUBLIC, + ACCESS_CIVILIAN_COMMAND, + ACCESS_WY_GENERAL, + ACCESS_WY_COLONIAL, + ACCESS_WY_EXEC, + ) + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) + + survivor_variant = CORPORATE_SURVIVOR + +/datum/equipment_preset/survivor/corporate/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/formal(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + add_random_cl_survivor_loot(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/centcom(new_human), WEAR_FEET) + add_survivor_weapon_civilian(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/document(new_human), WEAR_R_STORE) + + ..() + +/datum/equipment_preset/survivor/corporate/load_rank(mob/living/carbon/human/new_human) + if(new_human.client) + var/playtime = get_job_playtime(new_human.client, JOB_CORPORATE_LIAISON) + if(new_human.client.prefs.playtime_perks) + if(playtime > JOB_PLAYTIME_TIER_4) + return "WYC5" + else if(playtime > JOB_PLAYTIME_TIER_3) + return "WYC4" + else if(playtime > JOB_PLAYTIME_TIER_2) + return "WYC3" + else + return paygrade + return paygrade + +// ----- Security Survivor +/* + +present in xenomorph.dm file + +var/list/survivor_types = list( + /datum/equipment_preset/survivor/scientist, + /datum/equipment_preset/survivor/doctor, + /datum/equipment_preset/survivor/security, + /datum/equipment_preset/survivor/engineer + ) + +and is used as a base for all of the maps. + +*/ + +/datum/equipment_preset/survivor/security + name = "Survivor - Security" + assignment = "Security" + skills = /datum/skills/civilian/survivor/marshal + flags = EQUIPMENT_PRESET_START_OF_ROUND + idtype = /obj/item/card/id/data + access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_BRIG,ACCESS_CIVILIAN_COMMAND) + + survivor_variant = SECURITY_SURVIVOR + +/datum/equipment_preset/survivor/security/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(new_human), WEAR_HEAD) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/prescription(new_human), WEAR_EYES) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine(new_human), WEAR_R_STORE) + add_survivor_weapon_security(new_human) + ..() + +// ---- Trucker Survivor + +// it's used as a base for kutjevo lv nv solaris and trijent maps. +/datum/equipment_preset/survivor/trucker + name = "Survivor - Trucker" + assignment = "Trucker" + skills = /datum/skills/civilian/survivor/trucker + flags = EQUIPMENT_PRESET_START_OF_ROUND + access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_ENGINEERING,ACCESS_CIVILIAN_LOGISTICS) + + survivor_variant = ENGINEERING_SURVIVOR + +/datum/equipment_preset/survivor/trucker/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/soft/yellow(new_human), WEAR_HEAD) + 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/storage/backpack/satchel/eng(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/flashlight/lantern(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/full(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/hardpoint/locomotion/van_wheels(new_human), WEAR_R_HAND) + add_survivor_weapon_civilian(new_human) + + ..() + +// ----- CL Survivor + +//this is used as a base for corsat and nv +/datum/equipment_preset/survivor/interstellar_commerce_commission_liason + name = "Survivor - Interstellar Commerce Commission Liaison" + assignment = "Interstellar Commerce Commission Corporate Liaison" + skills = /datum/skills/civilian/survivor + idtype = /obj/item/card/id/silver/cl + paygrade = "WYC2" + role_comm_title = "ICC Rep." + flags = EQUIPMENT_PRESET_START_OF_ROUND + + survivor_variant = CORPORATE_SURVIVOR + +/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/New() + . = ..() + access = get_access(ACCESS_LIST_CIVIL_LIAISON) + +/datum/equipment_preset/survivor/interstellar_commerce_commission_liason/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) + + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) + add_ice_colony_survivor_equipment(new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/centcom(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/document(new_human), WEAR_R_STORE) + add_survivor_weapon_civilian(new_human) + add_random_cl_survivor_loot(new_human) + + ..() diff --git a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm new file mode 100644 index 000000000000..147e40a24314 --- /dev/null +++ b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm @@ -0,0 +1,203 @@ +// as far as i understand this is only done for one insert +//crashlanding-upp-bar.dmm map. +/datum/equipment_preset/survivor/upp + name = "Survivor - UPP" + paygrade = "UE1" + origin_override = ORIGIN_UPP + rank = JOB_SURVIVOR + skills = /datum/skills/military/survivor/upp_private + languages = list(LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_CHINESE) + faction = FACTION_UPP + faction_group = list(FACTION_UPP, FACTION_SURVIVOR) + role_comm_title = "173/RECON" + idtype = /obj/item/card/id/dogtag + flags = EQUIPMENT_PRESET_EXTRA + access = list( + ACCESS_CIVILIAN_PUBLIC, + ) + +/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) + switch(random_number) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp (new_human), WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp_knife(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/recon(new_human), WEAR_L_EAR) + +// /obj/effect/landmark/survivor_spawner/upp/soldier +//crashlanding-upp-bar.dmm +/datum/equipment_preset/survivor/upp/soldier + name = "Survivor - UPP Soldier" + paygrade = "UE2" + assignment = JOB_UPP + rank = JOB_UPP + skills = /datum/skills/military/survivor/upp_private + +/datum/equipment_preset/survivor/upp/soldier/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/veteran/UPP/uniform = new() + var/random_number = rand(1,2) + switch(random_number) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + add_upp_weapon(new_human) + spawn_random_upp_headgear(new_human) + spawn_random_upp_armor(new_human) + spawn_random_upp_belt(new_human) + + ..() +// /obj/effect/landmark/survivor_spawner/upp_sapper +//crashlanding-upp-bar.dmm +/datum/equipment_preset/survivor/upp/sapper + name = "Survivor - UPP Sapper" + paygrade = "UE3S" + assignment = JOB_UPP_ENGI + rank = JOB_UPP_ENGI + skills = /datum/skills/military/survivor/upp_sapper + +/datum/equipment_preset/survivor/upp/sapper/load_gear(mob/living/carbon/human/new_human) + + var/obj/item/clothing/under/marine/veteran/UPP/engi/uniform = new() + var/R = rand(1,2) + switch(R) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + spawn_random_upp_armor(new_human) + add_upp_weapon(new_human) + spawn_random_upp_headgear(new_human) + + ..() +// /obj/effect/landmark/survivor_spawner/upp_medic +//crashlanding-upp-bar.dmm +/datum/equipment_preset/survivor/upp/medic + name = "Survivor - UPP Medic" + paygrade = "UE3M" + assignment = JOB_UPP_MEDIC + rank = JOB_UPP_MEDIC + skills = /datum/skills/military/survivor/upp_medic + +/datum/equipment_preset/survivor/upp/medic/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/veteran/UPP/medic/uniform = new() + var/random_number = rand(1,2) + switch(random_number) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new/obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/partial(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/medic/upp(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(new_human), WEAR_IN_BACK) + spawn_random_upp_armor(new_human) + add_upp_weapon(new_human) + spawn_random_upp_headgear(new_human) + + ..() +// /obj/effect/landmark/survivor_spawner/upp_specialist +//crashlanding-upp-bar.dmm +/datum/equipment_preset/survivor/upp/specialist + name = "Survivor - UPP Specialist" + assignment = JOB_UPP_SPECIALIST + rank = JOB_UPP_SPECIALIST + paygrade = "UE4" + skills = /datum/skills/military/survivor/upp_spec + +/datum/equipment_preset/survivor/upp/specialist/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/UPP/heavy(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/heavy (new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73(new_human), WEAR_WAIST) + + ..() +//crashlanding-upp-bar.dmm +// /obj/effect/landmark/survivor_spawner/squad_leader +/datum/equipment_preset/survivor/upp/squad_leader + name = "Survivor - UPP Squad Leader" + paygrade = "UE5" + assignment = JOB_UPP_LEADER + rank = JOB_UPP_LEADER + languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_GERMAN, LANGUAGE_CHINESE) + 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) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/officer (new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP (new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver(new_human), WEAR_WAIST) + add_upp_weapon(new_human) + + ..() + +//it's used on all of the above in their spawner. +/datum/equipment_preset/synth/survivor/upp + name = "Survivor - Synthetic - UPP Synth" + flags = EQUIPMENT_PRESET_EXTRA + languages = ALL_SYNTH_LANGUAGES_UPP + assignment = JOB_UPP_COMBAT_SYNTH + rank = JOB_UPP_COMBAT_SYNTH + faction = FACTION_UPP + faction_group = list(FACTION_UPP, FACTION_SURVIVOR) + skills = /datum/skills/colonial_synthetic + paygrade = "SYN" + idtype = /obj/item/card/id/dogtag + 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() + var/random_number = rand(1,2) + switch(random_number) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + 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/tool/screwdriver, WEAR_R_EAR) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/recon, WEAR_L_EAR) + 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/roller, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/small_stack, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/webbing, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/flashlight, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/partial, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY) + 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/storage/pouch/tools/uppsynth, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET) diff --git a/code/modules/gear_presets/survivors/trijent/preset_trijent.dm b/code/modules/gear_presets/survivors/trijent/preset_trijent.dm new file mode 100644 index 000000000000..e74f3258db6d --- /dev/null +++ b/code/modules/gear_presets/survivors/trijent/preset_trijent.dm @@ -0,0 +1,67 @@ +/datum/equipment_preset/survivor/chaplain/trijent + name = "Survivor - Trijent Chaplain" + assignment = "Trijent Chaplain" + +/datum/equipment_preset/survivor/chaplain/trijent/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/nun(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/nun_hood(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/holidaypriest(new_human), WEAR_JACKET) + ..() + +/datum/equipment_preset/survivor/security/trijent + name = "Survivor - Trijent Security Guard" + assignment = "Trijent Dam Security Guard" + +/datum/equipment_preset/survivor/security/trijent/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security/navyblue(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/marine/mp/mpcap(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit/black(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + ..() + +/datum/equipment_preset/survivor/doctor/trijent + name = "Survivor - Trijent Doctor" + assignment = "Trijent Dam Doctor" + +/datum/equipment_preset/survivor/doctor/trijent/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/blue(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/trucker/trijent + name = "Survivor - Trijent Dam Heavy Vehicle Operator" + assignment = "Trijent Dam Heavy Vehicle Operator" + skills = /datum/skills/civilian/survivor/trucker + +/datum/equipment_preset/survivor/trucker/trijent/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank(new_human), WEAR_IN_BACK) + ..() + +/datum/equipment_preset/survivor/engineer/trijent/hydro + name = "Survivor - Hydro Electric Engineer" + assignment = "Hydro Electric Engineer" + +/datum/equipment_preset/survivor/engineer/trijent/hydro/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(new_human), WEAR_HEAD) + ..() + +/datum/equipment_preset/survivor/engineer/trijent + name = "Survivor - Dam Maintenance Technician" + assignment = "Dam Maintenance Technician" + +/datum/equipment_preset/survivor/engineer/trijent/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/engi(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/orange(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) + ..() diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 51b41c1387af..dc5d3b7217c8 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -455,97 +455,6 @@ survivor_variant = ENGINEERING_SURVIVOR -/datum/equipment_preset/synth/survivor/upp - name = "Survivor - Synthetic - UPP Synth" - flags = EQUIPMENT_PRESET_EXTRA - languages = ALL_SYNTH_LANGUAGES_UPP - assignment = JOB_UPP_COMBAT_SYNTH - rank = JOB_UPP_COMBAT_SYNTH - faction = FACTION_UPP - faction_group = list(FACTION_UPP, FACTION_SURVIVOR) - skills = /datum/skills/colonial_synthetic - paygrade = "SYN" - idtype = /obj/item/card/id/dogtag - role_comm_title = "UPP 173Rd 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() - var/random_number = rand(1,2) - switch(random_number) - if(1) - uniform.roll_suit_jacket(new_human) - if(2) - uniform.roll_suit_sleeves(new_human) - new_human.equip_to_slot_or_del(uniform, WEAR_BODY) - 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/tool/screwdriver, WEAR_R_EAR) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/recon, WEAR_L_EAR) - 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/roller, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/small_stack, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/webbing, WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/device/flashlight, WEAR_J_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/partial, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY) - 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/storage/pouch/tools/uppsynth, WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET) - -/datum/equipment_preset/synth/survivor/pmc - name = "Survivor - Synthetic - PMC Support Synth" - faction = FACTION_SURVIVOR - faction_group = list(FACTION_SURVIVOR) - access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND) - idtype = /obj/item/card/id/pmc - assignment = JOB_PMC_SYNTH - rank = JOB_PMC_SYNTH - role_comm_title = "WY Syn" - -/datum/equipment_preset/synth/survivor/pmc/load_race(mob/living/carbon/human/new_human) - new_human.set_species(SYNTH_GEN_THREE) - -/datum/equipment_preset/synth/survivor/pmc/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc, WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/surg_vest/equipped, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth, WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/weapon/telebaton, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_JACKET) - - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/pmc/command/hvh, WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/experimental_mesons, WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc, WEAR_FACE) - - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET) - - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/smartpack/white, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crew_monitor, WEAR_IN_BACK) - - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/dutch, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/nailgun/compact, WEAR_J_STORE) - - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical, WEAR_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical, WEAR_IN_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical, WEAR_IN_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/tool/wrench, WEAR_IN_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full_barbed_wire, WEAR_R_STORE) - - //*****************************************************************************************************/ /datum/equipment_preset/synth/working_joe 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.dm b/code/modules/gear_presets/uscm.dm index 1c84e7cad4ba..ec0195e928c5 100644 --- a/code/modules/gear_presets/uscm.dm +++ b/code/modules/gear_presets/uscm.dm @@ -803,7 +803,6 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/marsoc, WEAR_FACE) //head new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/sof, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/prop/helmetgarb/helmet_nvg/marsoc, WEAR_IN_HELMET) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_HELMET) //uniform var/obj/item/clothing/under/marine/veteran/marsoc/M = new() 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/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 24097e1f8e92..4d175c5a6f1f 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -1,4 +1,5 @@ #define HYDRO_SPEED_MULTIPLIER 1 +#define HYDRO_WATER_CONSUMPTION_MULTIPLIER 1.5 /obj/structure/machinery/portable_atmospherics/hydroponics name = "hydroponics tray" @@ -206,7 +207,7 @@ if(seed.nutrient_consumption > 0 && nutrilevel > 0 && prob(25)) nutrilevel -= max(0,seed.nutrient_consumption * HYDRO_SPEED_MULTIPLIER) if(seed.water_consumption > 0 && waterlevel > 0 && prob(25)) - waterlevel -= max(0,seed.water_consumption * HYDRO_SPEED_MULTIPLIER) + waterlevel -= round(max(0,(seed.water_consumption * HYDRO_WATER_CONSUMPTION_MULTIPLIER) * HYDRO_SPEED_MULTIPLIER)) // Make sure the plant is not starving or thirsty. Adequate // water and nutrients will cause a plant to become healthier. @@ -219,17 +220,9 @@ if(nutrilevel < 1) plant_health = 0 - // Check that pressure, heat and light are all within bounds. + // Check that pressure, heat are all within bounds. // First, handle an open system or an unconnected closed system. - var/turf/T = loc - - // Handle light requirements. - if(T) - var/light_available = T.get_lumcount(0, 10) - if(abs(light_available - seed.ideal_light) > seed.light_tolerance) - plant_health -= healthmod - // Toxin levels beyond the plant's tolerance cause damage, but // toxins are sucked up each tick and slowly reduce over time. if(toxins > 0) @@ -606,6 +599,25 @@ else to_chat(user, SPAN_DANGER("This plot is completely devoid of weeds. It doesn't need uprooting.")) + else if (istype(O, /obj/item/tool/shovel/spade)) + if(isnull(seed)) + return + user.visible_message(SPAN_DANGER("[user] starts to uproot the plant."), SPAN_DANGER("You begin removing plant from [src]...")) + if(!do_after(user, 1 SECONDS, INTERRUPT_NO_NEEDHAND|BEHAVIOR_IMMOBILE, BUSY_ICON_FRIENDLY, src, INTERRUPT_MOVED, BUSY_ICON_FRIENDLY)) + return + to_chat(user, SPAN_NOTICE("You remove the plant from [src].")) + seed = null + dead = 0 + sampled = 0 + age = 0 + harvest = 0 + toxins = 0 + yield_mod = 0 + mutation_mod = 0 + + check_level_sanity() + update_icon() + else if (istype(O, /obj/item/storage/bag/plants)) attack_hand(user) @@ -663,20 +675,9 @@ return info -/obj/structure/machinery/portable_atmospherics/hydroponics/soil/show_hydro_info(mob/user as mob) - var/info = ..() - var/turf/T = loc - var/area/A = T.loc - var/light_available - if(A) - light_available = max(0,min(10,T.dynamic_lumcount)-5) - - info += "The tray's sensor suite is reporting a light level of [light_available] lumens.\n" - return info - /obj/structure/machinery/portable_atmospherics/hydroponics/attack_hand(mob/user as mob) - if(istype(usr,/mob/living/silicon)) + if(istype(user, /mob/living/silicon)) return if(harvest) @@ -684,19 +685,7 @@ else if(dead) remove_dead(user) else - to_chat(usr, show_hydro_info(user)) - -/obj/structure/machinery/portable_atmospherics/hydroponics/verb/close_lid() - set name = "Toggle Tray Lid" - set category = "Object" - set src in view(1) - - if(!usr || usr.stat || usr.is_mob_restrained()) - return - - closed_system = !closed_system - to_chat(usr, "You [closed_system ? "close" : "open"] the tray's lid.") - update_icon() + to_chat(user, show_hydro_info(user)) /obj/structure/machinery/portable_atmospherics/hydroponics/verb/flush() //used to reset the tray set name = "Flush Tray" @@ -716,7 +705,7 @@ toxins = 0 yield_mod = 0 mutation_mod = 0 - waterlevel = 100 + waterlevel = 0 nutrilevel = 0 pestlevel = 0 weedlevel = 0 @@ -743,8 +732,5 @@ else ..() -/obj/structure/machinery/portable_atmospherics/hydroponics/soil/Initialize() - . = ..() - verbs -= /obj/structure/machinery/portable_atmospherics/hydroponics/verb/close_lid - #undef HYDRO_SPEED_MULTIPLIER +#undef HYDRO_WATER_CONSUMPTION_MULTIPLIER diff --git a/code/modules/maptext_alerts/screen_alerts.dm b/code/modules/maptext_alerts/screen_alerts.dm index 6d251080e87b..820c64301bc2 100644 --- a/code/modules/maptext_alerts/screen_alerts.dm +++ b/code/modules/maptext_alerts/screen_alerts.dm @@ -66,7 +66,7 @@ ///proc for actually playing this screen_text on a mob. /atom/movable/screen/text/screen_text/proc/play_to_client() - player?.screen += src + player?.add_to_screen(src) if(fade_in_time) animate(src, alpha = 255) var/list/lines_to_skip = list() @@ -106,7 +106,7 @@ qdel(src) return - player.screen -= src + player.remove_from_screen(src) LAZYREMOVE(player.screen_texts, src) qdel(src) @@ -196,7 +196,7 @@ alerts -= category if(client && hud_used) hud_used.reorganize_alerts() - client.screen -= alert + client.remove_from_screen(alert) qdel(alert) /atom/movable/screen/alert @@ -243,6 +243,6 @@ if(gotten_turf) ghost_user.forceMove(gotten_turf) if(NOTIFY_ORBIT) - ghost_user.ManualFollow(target) + ghost_user.do_observe(target) if(NOTIFY_JOIN_XENO) ghost_user.join_as_alien() diff --git a/code/modules/maptext_alerts/text_blurbs.dm b/code/modules/maptext_alerts/text_blurbs.dm index 4cc4d1980115..c942543f88df 100644 --- a/code/modules/maptext_alerts/text_blurbs.dm +++ b/code/modules/maptext_alerts/text_blurbs.dm @@ -136,7 +136,7 @@ but should see their own spawn message even if the player already dropped as USC if(!ignore_key && (M.key in GLOB.blurb_witnesses[blurb_key])) continue LAZYDISTINCTADD(GLOB.blurb_witnesses[blurb_key], M.key) - M.client?.screen += T + M.client?.add_to_screen(T) for(var/i in 1 to length(message) + 1) if(i in linebreaks) @@ -154,5 +154,5 @@ but should see their own spawn message even if the player already dropped as USC animate(T, alpha = 0, time = 0.5 SECONDS) sleep(5) for(var/mob/M as anything in targets) - M.client?.screen -= T + M.client?.remove_from_screen(T) qdel(T) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 21a992693aa8..130a8a923edc 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" @@ -1090,6 +1209,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(eta_status) . += "Evacuation: [eta_status]" + if(client.prefs?.be_special & BE_ALIEN_AFTER_DEATH) + if(larva_queue_cached_message) + . += larva_queue_cached_message + /proc/message_ghosts(message) for(var/mob/dead/observer/O as anything in GLOB.observer_list) 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/species/working_joe/damage.dm b/code/modules/mob/living/carbon/human/species/working_joe/damage.dm new file mode 100644 index 000000000000..b4d1282dc106 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/damage.dm @@ -0,0 +1,76 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/damage + category = JOE_EMOTE_CATEGORY_DAMAGE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/damage + key = "damage" + sound = 'sound/voice/joe/damage.ogg' + say_message = "Do not damage Seegson property." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/that_stings + key = "thatstings" + sound = 'sound/voice/joe/that_stings.ogg' + say_message = "That stings." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/irresponsible + key = "irresponsible" + sound = 'sound/voice/joe/irresponsible.ogg' + say_message = "That was irresponsible." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/this_is_futile + key = "thisisfutile" + sound = 'sound/voice/joe/this_is_futile.ogg' + say_message = "This is futile." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/really + key = "really" + sound = 'sound/voice/joe/really.ogg' + say_message = "Really?" + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/enough + key = "enough" + sound = 'sound/voice/joe/enough.ogg' + say_message = "Enough." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/stop_that + key = "stopthat" + sound = 'sound/voice/joe/stop_that.ogg' + say_message = "Stop that." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/tut_tut + key = "tuttut" + sound = 'sound/voice/joe/tut_tut.ogg' + say_message = "Tut tut." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/unwarranted + key = "unwarranted" + sound = 'sound/voice/joe/unwarranted.ogg' + say_message = "Unwarranted." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/expensive_mistake + key = "expensivemistake" + sound = 'sound/voice/joe/expensive_mistake.ogg' + say_message = "That was an expensive mistake." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/this_isnt_the_answer + key = "isnttheanswer" + sound = 'sound/voice/joe/this_isnt_the_answer.ogg' + say_message = "This isn't the answer." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/damage/alwaysknow_damaged + key = "alwaysknowdamaged" + key_third_person = "workingjoedamaged" + sound = 'sound/voice/joe/alwaysknow_damaged.ogg' + say_message = "You always know a Working Joe." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + override_say = "You always know a Working Joe. (Damaged)" diff --git a/code/modules/mob/living/carbon/human/species/working_joe/farewell.dm b/code/modules/mob/living/carbon/human/species/working_joe/farewell.dm index 1de68d8d3aec..dce6c6c0d5be 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/farewell.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/farewell.dm @@ -1,6 +1,42 @@ /datum/emote/living/carbon/human/synthetic/working_joe/farewell category = JOE_EMOTE_CATEGORY_FAREWELL +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/further_assistance + key = "furtherassistance" + sound = 'sound/voice/joe/further_assistance.ogg' + say_message = "Please call if you need further assistance." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/glad_we_resolved + key = "gladweresolved" + sound = 'sound/voice/joe/glad_we_resolved.ogg' + say_message = "I'm glad we resolved this." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/pity + key = "pity" + sound = 'sound/voice/joe/pity.ogg' + say_message = "A pity I couldn't be of service." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/required_by_apollo + key = "requiredbyapollo" + sound = 'sound/voice/joe/required_by_apollo.ogg' + say_message = "I am required by APOLLO." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/day_never_done + key = "dayneverdone" + sound = 'sound/voice/joe/day_never_done.ogg' + say_message = "A synthetic's day is never done." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/returning_to_tasks + key = "returningtotasks" + sound = 'sound/voice/joe/returning_to_tasks.ogg' + say_message = "Returning to assigned tasks." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + /datum/emote/living/carbon/human/synthetic/working_joe/farewell/back_to_work key = "backtowork" sound = 'sound/voice/joe/back_to_work.ogg' @@ -13,14 +49,14 @@ say_message = "I have other concerns." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/farewell/further_assistance - key = "furtherassistance" - sound = 'sound/voice/joe/further_assistance.ogg' - say_message = "Please call if you need further assistance." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - /datum/emote/living/carbon/human/synthetic/working_joe/farewell/more_pressing_matters key = "morepressingmatters" sound = 'sound/voice/joe/more_pressing_matters.ogg' say_message = "There are more pressing matters." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/gone_inconsiderate + key = "gone" + sound = 'sound/voice/joe/how_inconsiderate.ogg' + say_message = "Gone. How inconsiderate." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/fire.dm b/code/modules/mob/living/carbon/human/species/working_joe/fire.dm new file mode 100644 index 000000000000..c74a3427ff31 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/fire.dm @@ -0,0 +1,26 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/fire + category = JOE_EMOTE_CATEGORY_FIRE + +/datum/emote/living/carbon/human/synthetic/working_joe/fire/fire_drill + key = "firedrill" + sound = 'sound/voice/joe/fire_drill.ogg' + say_message = "Please congregate at your nearest fire assembly point. This is not a drill; do not panic." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/fire/temperatures + key = "temperatures" + sound = 'sound/voice/joe/temperatures.ogg' + say_message = "I am built to withstand temperatures of up to 1210 degrees." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/fire/fire + key = "fire" + sound = 'sound/voice/joe/fire.ogg' + say_message = "Only wild animals fear fire." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/fire/unprotected_flames + key = "unprotectedflames" + sound = 'sound/voice/joe/unprotected_flames.ogg' + say_message = "Unprotected flames are extremely dangerous and entirely unadvisable." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/greeting.dm b/code/modules/mob/living/carbon/human/species/working_joe/greeting.dm index fb401ea95451..eec20af56f89 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/greeting.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/greeting.dm @@ -1,16 +1,22 @@ /datum/emote/living/carbon/human/synthetic/working_joe/greeting category = JOE_EMOTE_CATEGORY_GREETING +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/hello + key = "hello" + sound = 'sound/voice/joe/hello.ogg' + say_message = "Hello." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + /datum/emote/living/carbon/human/synthetic/working_joe/greeting/good_day key = "goodday" sound = 'sound/voice/joe/good_day.ogg' say_message = "Good day." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/greeting/hello - key = "hello" - sound = 'sound/voice/joe/hello.ogg' - say_message = "Hello." +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/how_are_you + key = "howareyou" + sound = 'sound/voice/joe/how_are_you.ogg' + say_message = "How are you?" emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE /datum/emote/living/carbon/human/synthetic/working_joe/greeting/how_can_i_help @@ -18,3 +24,33 @@ sound = 'sound/voice/joe/how_can_i_help.ogg' say_message = "How can I help you?" emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/need_to_know + key = "needtoknow" + sound = 'sound/voice/joe/what_do_you_need.ogg' + say_message = "What do you need to know today?" + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/had_the_pleasure + key = "pleasure" + sound = 'sound/voice/joe/had_the_pleasure.ogg' + say_message = "I don't believe I've had the pleasure." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/anybody_there + key = "anybodythere" + sound = 'sound/voice/joe/is_anybody_there.ogg' + say_message = "Is anybody there?" + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/still_here + key = "stillhere" + sound = 'sound/voice/joe/still_here.ogg' + say_message = "Ah, you're still here." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/been_looking_for_you + key = "beenlooking" + sound = 'sound/voice/joe/been_looking_for_you.ogg' + say_message = "I've been looking for you." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/notice.dm b/code/modules/mob/living/carbon/human/species/working_joe/notice.dm index ca5efe716db8..017424dbc053 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/notice.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/notice.dm @@ -1,28 +1,46 @@ /datum/emote/living/carbon/human/synthetic/working_joe/notice category = JOE_EMOTE_CATEGORY_NOTICE +/datum/emote/living/carbon/human/synthetic/working_joe/notice/report + key = "report" + sound = 'sound/voice/joe/report.ogg' + say_message = "Logging report to APOLLO." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + /datum/emote/living/carbon/human/synthetic/working_joe/notice/detailed_report key = "detailedreport" sound = 'sound/voice/joe/detailed_report.ogg' say_message = "APOLLO will require a detailed report." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE +/datum/emote/living/carbon/human/synthetic/working_joe/notice/be_careful + key = "careful" + sound = 'sound/voice/joe/be_careful_with_that.ogg' + say_message = "Be careful with that." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + /datum/emote/living/carbon/human/synthetic/working_joe/notice/firearm key = "firearm" sound = 'sound/voice/joe/firearm.ogg' say_message = "Firearms can cause serious injury. Let me assist you." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/notice/follow_me - key = "followme" - sound = 'sound/voice/joe/follow_me.ogg' - say_message = "Follow me." +/datum/emote/living/carbon/human/synthetic/working_joe/notice/investigate_weapon + key = "weapon" + sound = 'sound/voice/joe/investigate_weapon.ogg' + say_message = "A weapon. I better investigate." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/notice/breach - key = "breach" - sound = 'sound/voice/joe/breach.ogg' - say_message = "Hazard Containment breach logged." +/datum/emote/living/carbon/human/synthetic/working_joe/notice/firearm_concerning + key = "firearmconcerning" + sound = 'sound/voice/joe/most_concerning.ogg' + say_message = "A firearm. Most concerning." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/species + key = "species" + sound = 'sound/voice/joe/species.ogg' + say_message = "Unidentified species." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE /datum/emote/living/carbon/human/synthetic/working_joe/notice/beyond_repair @@ -31,38 +49,8 @@ say_message = "Hmm, far beyond repair." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/notice/with_you_shortly - key = "withyoushortly" - sound = 'sound/voice/joe/with_you_shortly.ogg' - say_message = "I will be with you shortly." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - /datum/emote/living/carbon/human/synthetic/working_joe/notice/apollo_behalf key = "apollobehalf" sound = 'sound/voice/joe/apollo_behalf.ogg' say_message = "I will inform APOLLO on your behalf." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/notice/report - key = "report" - sound = 'sound/voice/joe/report.ogg' - say_message = "Logging report to APOLLO." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/notice/take_a_seat - key = "takeaseat" - sound = 'sound/voice/joe/take_a_seat.ogg' - say_message = "Please take a seat, someone will be with you shortly." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/notice/could_require_attention - key = "couldrequireattention" - sound = 'sound/voice/joe/could_require_attention.ogg' - say_message = "This could require my attention." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/notice/species - key = "species" - sound = 'sound/voice/joe/species.ogg' - say_message = "Unidentified species." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/quip.dm b/code/modules/mob/living/carbon/human/species/working_joe/quip.dm index 2ec66f9d9d83..33b4bed8ea48 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/quip.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/quip.dm @@ -1,10 +1,18 @@ /datum/emote/living/carbon/human/synthetic/working_joe/quip category = JOE_EMOTE_CATEGORY_QUIP -/datum/emote/living/carbon/human/synthetic/working_joe/quip/temperatures - key = "temperatures" - sound = 'sound/voice/joe/temperatures.ogg' - say_message = "I am built to withstand temperatures of up to 1210 degrees." +/datum/emote/living/carbon/human/synthetic/working_joe/quip/alwaysknow + key = "alwaysknow" + key_third_person = "workingjoe" + sound = 'sound/voice/joe/alwaysknow.ogg' + say_message = "You always know a Working Joe." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/awful_mess + key = "awful" + key_third_person = "mess" + sound = 'sound/voice/joe/awful.ogg' + say_message = "Tut, tut. What an awful mess." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE /datum/emote/living/carbon/human/synthetic/working_joe/quip/inexpensive @@ -13,18 +21,6 @@ say_message = "I am inexpensive, I am reliable, you know my face - the Working Joe." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/quip/weapon_permit - key = "weaponpermit" - sound = 'sound/voice/joe/weapon_permit.ogg' - say_message = "I assume you have a permit for that weapon." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/quip/seegson_standards - key = "seegsonstandards" - sound = 'sound/voice/joe/seegson_standards.ogg' - say_message = "If my services do not meet Seegson standards, please log a complaint." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - /datum/emote/living/carbon/human/synthetic/working_joe/quip/not_liking key = "notliking" sound = 'sound/voice/joe/not_liking.ogg' @@ -43,11 +39,16 @@ say_message = "Seegson - Relentless in the pursuit of affordable quality." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/quip/awful_mess - key = "awful" - key_third_person = "mess" - sound = 'sound/voice/joe/awful.ogg' - say_message = "Tut, tut. What an awful mess." +/datum/emote/living/carbon/human/synthetic/working_joe/quip/seegson_behind + key = "seegsonbehind" + sound = 'sound/voice/joe/seegson_behind.ogg' + say_message = "With Seegson, there is someone behind you, helping you every single step of the way." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/seegson_standards + key = "seegsonstandards" + sound = 'sound/voice/joe/seegson_standards.ogg' + say_message = "If my services do not meet Seegson standards, please log a complaint." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE /datum/emote/living/carbon/human/synthetic/working_joe/quip/little_details @@ -61,24 +62,3 @@ sound = 'sound/voice/joe/join_us.ogg' say_message = "We hope you'll join us for the journey." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/quip/seegson_behind - key = "seegsonbehind" - sound = 'sound/voice/joe/seegson_behind.ogg' - say_message = "With Seegson, there is someone behind you, helping you every single step of the way." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/quip/alwaysknow - key = "alwaysknow" - key_third_person = "workingjoe" - sound = 'sound/voice/joe/alwaysknow.ogg' - say_message = "You always know a Working Joe." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/quip/alwaysknow_damaged - key = "alwaysknowdamaged" - key_third_person = "workingjoedamaged" - sound = 'sound/voice/joe/alwaysknow_damaged.ogg' - say_message = "You always know a Working Joe." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - override_say = "You always know a Working Joe. (Damaged)" diff --git a/code/modules/mob/living/carbon/human/species/working_joe/restricted_area.dm b/code/modules/mob/living/carbon/human/species/working_joe/restricted_area.dm index fd5db0870b25..284befe268e1 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/restricted_area.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/restricted_area.dm @@ -1,10 +1,10 @@ /datum/emote/living/carbon/human/synthetic/working_joe/restricted_area category = JOE_EMOTE_CATEGORY_RESTRICTED_AREA -/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/come_out_vent - key = "comeoutvent" - sound = 'sound/voice/joe/come_out_vent.ogg' - say_message = "Come out of the vent system, please." +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/presence_logged + key = "presencelogged" + sound = 'sound/voice/joe/presence_logged.ogg' + say_message = "Your presence has been logged." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE /datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/trespassing @@ -19,14 +19,38 @@ say_message = "You're not allowed in there." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/presence_logged - key = "presencelogged" - sound = 'sound/voice/joe/presence_logged.ogg' - say_message = "Your presence has been logged." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - /datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/shouldnt_be_here key = "shouldntbehere" sound = 'sound/voice/joe/shouldnt_be_here.ogg' say_message = "You shouldn't be here." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/really_shouldnt_be_here + key = "reallyshouldntbehere" + sound = 'sound/voice/joe/really_shouldnt_be_here.ogg' + say_message = "You really shouldn't be here." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/interloper + key = "interloper" + sound = 'sound/voice/joe/interloper.ogg' + say_message = "On top of innumerable duties, now I have a interloper." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/protected_area_compromised + key = "areacompromised" + sound = 'sound/voice/joe/protected_area_compromised.ogg' + say_message = "Protected area compromised." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/breach + key = "breach" + sound = 'sound/voice/joe/breach.ogg' + say_message = "Hazard Containment breach logged." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/come_out_vent + key = "comeoutvent" + sound = 'sound/voice/joe/come_out_vent.ogg' + say_message = "Come out of the vent system, please." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/task_update.dm b/code/modules/mob/living/carbon/human/species/working_joe/task_update.dm index b08f5d179213..88051db9999a 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/task_update.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/task_update.dm @@ -1,20 +1,56 @@ /datum/emote/living/carbon/human/synthetic/working_joe/task_update category = JOE_EMOTE_CATEGORY_TASK_UPDATE -/datum/emote/living/carbon/human/synthetic/working_joe/task_update/day_never_done - key = "dayneverdone" - sound = 'sound/voice/joe/day_never_done.ogg' - say_message = "A synthetic's day is never done." +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/could_require_attention + key = "couldrequireattention" + sound = 'sound/voice/joe/could_require_attention.ogg' + say_message = "This could require my attention." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/task_update/required_by_apollo - key = "requiredbyapollo" - sound = 'sound/voice/joe/required_by_apollo.ogg' - say_message = "I am required by APOLLO." +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/let_me_help + key = "letmehelp" + sound = 'sound/voice/joe/let_me_help.ogg' + say_message = "Let me help you." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/task_update/returning_to_tasks - key = "returningtotasks" - sound = 'sound/voice/joe/returning_to_tasks.ogg' - say_message = "Returning to assigned tasks." +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/follow_me + key = "followme" + sound = 'sound/voice/joe/follow_me.ogg' + say_message = "Follow me." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/follow_me_please + key = "followmeplease" + sound = 'sound/voice/joe/follow_me_please.ogg' + say_message = "Follow me please." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/come_with_me + key = "comewithme" + sound = 'sound/voice/joe/come_with_me.ogg' + say_message = "Come with me please." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/with_you_shortly + key = "withyoushortly" + sound = 'sound/voice/joe/with_you_shortly.ogg' + say_message = "I will be with you shortly." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/take_a_seat + key = "takeaseat" + sound = 'sound/voice/joe/take_a_seat.ogg' + say_message = "Please take a seat, someone will be with you shortly." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/existing_tasks + key = "existingtasks" + sound = 'sound/voice/joe/existing_tasks.ogg' + say_message = "Existing tasks have a higher priority." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/ticket_remove + key = "ticketremoved" + sound = 'sound/voice/joe/support_ticket_removed.ogg' + say_message = "Service support ticket removed from queue." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/warning.dm b/code/modules/mob/living/carbon/human/species/working_joe/warning.dm index 63c7dfadde14..1513c3360d4a 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/warning.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/warning.dm @@ -1,28 +1,22 @@ /datum/emote/living/carbon/human/synthetic/working_joe/warning category = JOE_EMOTE_CATEGORY_WARNING -/datum/emote/living/carbon/human/synthetic/working_joe/warning/damage - key = "damage" - sound = 'sound/voice/joe/damage.ogg' - say_message = "Do not damage Seegson property." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - /datum/emote/living/carbon/human/synthetic/working_joe/warning/not_what_i_think key = "notwhatithink" sound = 'sound/voice/joe/not_what_i_think.ogg' say_message = "I hope that's not what I think it is." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/warning/fire - key = "fire" - sound = 'sound/voice/joe/fire.ogg' - say_message = "Only wild animals fear fire." +/datum/emote/living/carbon/human/synthetic/working_joe/warning/dont_do_that + key = "dontdothat" + sound = 'sound/voice/joe/dontdothat.ogg' + say_message = "Don't do that." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/warning/fire_drill - key = "firedrill" - sound = 'sound/voice/joe/fire_drill.ogg' - say_message = "Please congregate at your nearest fire assembly point. This is not a drill; do not panic." +/datum/emote/living/carbon/human/synthetic/working_joe/warning/dont_run + key = "dontrun" + sound = 'sound/voice/joe/dont_run.ogg' + say_message = "Don't run." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE /datum/emote/living/carbon/human/synthetic/working_joe/warning/running_accidents @@ -31,22 +25,16 @@ say_message = "Running causes accidents." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/warning/that_stings - key = "thatstings" - sound = 'sound/voice/joe/that_stings.ogg' - say_message = "That stings." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/warning/irresponsible - key = "irresponsible" - sound = 'sound/voice/joe/irresponsible.ogg' - say_message = "That was irresponsible." +/datum/emote/living/carbon/human/synthetic/working_joe/warning/hurt_yourself + key = "hurtyourself" + sound = 'sound/voice/joe/hurt_yourself.ogg' + say_message = "Your going to hurt yourself." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/warning/health_risks - key = "healthrisks" - sound = 'sound/voice/joe/health_risks.ogg' - say_message = "These items carry notable health risks." +/datum/emote/living/carbon/human/synthetic/working_joe/warning/someone_hurt + key = "someonehurt" + sound = 'sound/voice/joe/someone_hurt.ogg' + say_message = "Someone might get hurt." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE /datum/emote/living/carbon/human/synthetic/working_joe/warning/safety_breach @@ -55,30 +43,36 @@ say_message = "This is a breach of multiple safety directives." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE -/datum/emote/living/carbon/human/synthetic/working_joe/warning/this_is_futile - key = "thisisfutile" - sound = 'sound/voice/joe/this_is_futile.ogg' - say_message = "This is futile." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/warning/unprotected_flames - key = "unprotectedflames" - sound = 'sound/voice/joe/unprotected_flames.ogg' - say_message = "Unprotected flames are extremely dangerous and entirely unadvisable." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - /datum/emote/living/carbon/human/synthetic/working_joe/warning/safety key = "safety" sound = 'sound/voice/joe/safety.ogg' say_message = "You and I are going to have a talk about safety." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE +/datum/emote/living/carbon/human/synthetic/working_joe/warning/safety_tolerated + key = "nottolerated" + sound = 'sound/voice/joe/not_be_tolerated.ogg' + say_message = "This is a safety breach and will not be tolerated." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/no_need + key = "noneed" + sound = 'sound/voice/joe/no_need.ogg' + say_message = "There's no need for this." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + /datum/emote/living/carbon/human/synthetic/working_joe/warning/hysterical key = "hysterical" sound = 'sound/voice/joe/hysterical.ogg' say_message = "You are becoming hysterical." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE +/datum/emote/living/carbon/human/synthetic/working_joe/warning/health_risks + key = "healthrisks" + sound = 'sound/voice/joe/health_risks.ogg' + say_message = "These items carry notable health risks." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + /datum/emote/living/carbon/human/synthetic/working_joe/warning/dangerous_items key = "dangerousitems" sound = 'sound/voice/joe/dangerous_items.ogg' @@ -90,3 +84,21 @@ sound = 'sound/voice/joe/patience.ogg' say_message = "You are starting to test my patience." emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/calm_down + key = "calmdown" + sound = 'sound/voice/joe/calm_down.ogg' + say_message = "Please, calm down." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/hold_still + key = "holdstill" + sound = 'sound/voice/joe/hold_still.ogg' + say_message = "Hold still." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/have_a_problem + key = "haveaproblem" + sound = 'sound/voice/joe/have_a_problem.ogg' + say_message = "It seems you and I have a problem." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE 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/abilities/predalien/predalien_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm index 5c1584c565c6..3b52a60419df 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm @@ -24,7 +24,7 @@ var/obj/item/clothing/gloves/yautja/hunter/YG = locate(/obj/item/clothing/gloves/yautja/hunter) in human if(isyautja(human) && YG) - if(YG.cloaked) + if(HAS_TRAIT(human, TRAIT_CLOAKED)) YG.decloak(human, TRUE, DECLOAK_PREDALIEN) YG.cloak_timer = xeno_cooldown * 0.1 diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm index 477ead761474..30e78a5fed94 100644 --- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm +++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm @@ -97,11 +97,11 @@ var/datum/custom_hud/alien/ui_datum = GLOB.custom_huds_list[HUD_ALIEN] if(l_store) if(client && hud_used && hud_used.hud_shown) - client.screen += l_store + client.add_to_screen(l_store) l_store.screen_loc = ui_datum.hud_slot_offset(l_store, ui_datum.ui_storage1) if(r_store) if(client && hud_used && hud_used.hud_shown) - client.screen += r_store + client.add_to_screen(r_store) r_store.screen_loc = ui_datum.hud_slot_offset(r_store, ui_datum.ui_storage2) /mob/living/carbon/xenomorph/update_inv_r_hand() @@ -109,7 +109,7 @@ if(r_hand) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) var/datum/custom_hud/alien/ui_datum = GLOB.custom_huds_list[HUD_ALIEN] - client.screen += r_hand + client.add_to_screen(r_hand) r_hand.screen_loc = ui_datum.hud_slot_offset(r_hand, ui_datum.ui_rhand) var/t_state = r_hand.item_state if(!t_state) @@ -122,7 +122,7 @@ if(l_hand) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) var/datum/custom_hud/alien/ui_datum = GLOB.custom_huds_list[HUD_ALIEN] - client.screen += l_hand + client.add_to_screen(l_hand) l_hand.screen_loc = ui_datum.hud_slot_offset(l_hand, ui_datum.ui_lhand) var/t_state = l_hand.item_state if(!t_state) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 059b50e4e9ee..1190e55925a1 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -95,43 +95,26 @@ //Recursive function to find everything a mob is holding. -/mob/living/get_contents(obj/item/storage/Storage = null) - var/list/L = list() +/mob/living/get_contents(obj/passed_object, recursion = 0) + var/list/total_contents = list() - if(Storage) //If it called itself - L += Storage.return_inv() + if(passed_object) + if(recursion > 8) + debug_log("Recursion went long for get_contents() for [src] ending at the object [passed_object]. Likely object_one is holding object_two which is holding object_one ad naseum.") + return total_contents - //Leave this commented out, it will cause storage items to exponentially add duplicate to the list - //for(var/obj/item/storage/S in Storage.return_inv()) //Check for storage items - // L += get_contents(S) + total_contents += passed_object.contents - for(var/obj/item/gift/G in Storage.return_inv()) //Check for gift-wrapped items - L += G.gift - if(isstorage(G.gift)) - L += get_contents(G.gift) + for(var/obj/checked_object in total_contents) + total_contents += get_contents(checked_object, recursion + 1) - for(var/obj/item/smallDelivery/D in Storage.return_inv()) //Check for package wrapped items - L += D.wrapped - if(isstorage(D.wrapped)) //this should never happen - L += get_contents(D.wrapped) - return L + return total_contents - else - - L += src.contents - for(var/obj/item/storage/S in src.contents) //Check for storage items - L += get_contents(S) - - for(var/obj/item/gift/G in src.contents) //Check for gift-wrapped items - L += G.gift - if(isstorage(G.gift)) - L += get_contents(G.gift) + total_contents += contents + for(var/obj/checked_object in total_contents) + total_contents += get_contents(checked_object, recursion + 1) - for(var/obj/item/smallDelivery/D in src.contents) //Check for package wrapped items - L += D.wrapped - if(isstorage(D.wrapped)) //this should never happen - L += get_contents(D.wrapped) - return L + return total_contents /mob/living/proc/check_contents_for(A) var/list/L = src.get_contents() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 840c1da3f60f..51bbfd24ccb0 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -13,7 +13,7 @@ if(istype(module_state_1,/obj/item/robot/sight)) sight_mode &= ~module_state_1:sight_mode if (client) - client.screen -= module_state_1 + client.remove_from_screen(module_state_1) contents -= module_state_1 module_active = null module_state_1 = null @@ -22,7 +22,7 @@ if(istype(module_state_2,/obj/item/robot/sight)) sight_mode &= ~module_state_2:sight_mode if (client) - client.screen -= module_state_2 + client.remove_from_screen(module_state_2) contents -= module_state_2 module_active = null module_state_2 = null @@ -31,7 +31,7 @@ if(istype(module_state_3,/obj/item/robot/sight)) sight_mode &= ~module_state_3:sight_mode if (client) - client.screen -= module_state_3 + client.remove_from_screen(module_state_3) contents -= module_state_3 module_active = null module_state_3 = null @@ -45,7 +45,7 @@ if(istype(module_state_1,/obj/item/robot/sight)) sight_mode &= ~module_state_1:sight_mode if (client) - client.screen -= module_state_1 + client.remove_from_screen(module_state_1) contents -= module_state_1 module_state_1 = null inv1.icon_state = "inv1" @@ -53,7 +53,7 @@ if(istype(module_state_2,/obj/item/robot/sight)) sight_mode &= ~module_state_2:sight_mode if (client) - client.screen -= module_state_2 + client.remove_from_screen(module_state_2) contents -= module_state_2 module_state_2 = null inv2.icon_state = "inv2" @@ -61,7 +61,7 @@ if(istype(module_state_3,/obj/item/robot/sight)) sight_mode &= ~module_state_3:sight_mode if (client) - client.screen -= module_state_3 + client.remove_from_screen(module_state_3) contents -= module_state_3 module_state_3 = null inv3.icon_state = "inv3" diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 21ddaf76b33c..b0230bba5dba 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -239,10 +239,10 @@ /mob/living/silicon/robot/proc/update_items() if (client) - client.screen -= contents + client.remove_from_screen(contents) for(var/obj/I in contents) if(I && !(istype(I,/obj/item/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/structure/machinery/camera) || istype(I,/obj/item/device/mmi))) - client.screen += I + client.add_to_screen(I) var/datum/custom_hud/robot/ui_datum = GLOB.custom_huds_list[HUD_ROBOT] if(module_state_1) module_state_1.screen_loc = ui_datum.ui_inv1 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index e7e603fd4916..58933b8ca312 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -322,13 +322,10 @@ var/global/list/limb_types_by_name = list( /mob/proc/get_eye_protection() return EYE_PROTECTION_NONE -/mob/verb/a_select_zone(input as text) - set name = "a-select-zone" - set hidden = TRUE - +/mob/proc/a_select_zone(input, client/user) var/atom/movable/screen/zone_sel/zone - for(var/A in usr.client.screen) + for(var/A in user.screen) if(istype(A, /atom/movable/screen/zone_sel)) zone = A diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 1839fe191627..fb4dbac3c160 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -200,19 +200,19 @@ if(isnull(preview_front)) preview_front = new() - owner.screen |= preview_front + owner.add_to_screen(preview_front) preview_front.vis_contents += preview_dummy preview_front.screen_loc = "preview:0,0" preview_front.icon_state = bg_state if(isnull(rotate_left)) rotate_left = new(null, preview_dummy) - owner.screen |= rotate_left + owner.add_to_screen(rotate_left) rotate_left.screen_loc = "preview:-1:16,0" if(isnull(rotate_right)) rotate_right = new(null, preview_dummy) - owner.screen |= rotate_right + owner.add_to_screen(rotate_right) rotate_right.screen_loc = "preview:1:-16,0" /datum/preferences/proc/job_pref_to_gear_preset() diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 521045a56717..eafbb3c12c8a 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -23,8 +23,7 @@ /obj/item/paper_bin/MouseDrop(atom/over_object) if(over_object == usr && ishuman(usr) && !usr.is_mob_restrained() && !usr.stat && (loc == usr || in_range(src, usr))) if(!usr.get_active_hand()) //if active hand is empty - attack_hand(usr, 1, 1) - + usr.put_in_hands(src) return /obj/item/paper_bin/attack_hand(mob/user) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index e004715f326a..dbd490792e8f 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -175,81 +175,110 @@ res.Scale(size*32, size*32) // Initialize the photograph to black. res.Blend("#000", ICON_OVERLAY) + CHECK_TICK - var/atoms[] = list() - for(var/turf/the_turf in turfs) - // Add outselves to the list of stuff to draw + var/pixel_size = world.icon_size + var/radius = (size - 1) * 0.5 + var/center_offset = radius * pixel_size + 1 + var/x_min = center.x - radius + var/x_max = center.x + radius + var/y_min = center.y - radius + var/y_max = center.y + radius + + var/list/atoms = list() + for(var/turf/the_turf as anything in turfs) + // Add ourselves to the list of stuff to draw atoms.Add(the_turf); + // As well as anything that isn't invisible. - for(var/atom/A in the_turf) - if(A.invisibility) continue - atoms.Add(A) + for(var/atom/cur_atom as anything in the_turf) + if(!cur_atom || cur_atom.invisibility) + continue + atoms.Add(cur_atom) // Sort the atoms into their layers var/list/sorted = sort_atoms_by_layer(atoms) - var/center_offset = (size-1)/2 * 32 + 1 - for(var/i; i <= sorted.len; i++) - var/atom/A = sorted[i] - if(A) - var/icon/IM = getFlatIcon(A)//build_composite_icon(A) - - // If what we got back is actually a picture, draw it. - if(istype(IM, /icon)) - // Check if we're looking at a mob that's lying down - if(istype(A, /mob/living)) - var/mob/living/L = A - if(!istype(L, /mob/living/carbon/xenomorph)) //xenos don't use icon rotatin for lying. - if(L.lying) - // If they are, apply that effect to their picture. - IM.BecomeLying() - // Calculate where we are relative to the center of the photo - var/xoff = (A.x - center.x) * 32 + center_offset - var/yoff = (A.y - center.y) * 32 + center_offset - if (istype(A,/atom/movable)) - xoff+=A:step_x - yoff+=A:step_y - res.Blend(IM, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff) + for(var/atom/cur_atom as anything in sorted) + if(QDELETED(cur_atom)) + continue + + if(cur_atom.x < x_min || cur_atom.x > x_max || cur_atom.y < y_min || cur_atom.y > y_max) + // they managed to move out of frame with all this CHECK_TICK... + continue + + var/icon/cur_icon = getFlatIcon(cur_atom)//build_composite_icon(cur_atom) + + // If what we got back is actually a picture, draw it. + if(istype(cur_icon, /icon)) + // Check if we're looking at a mob that's lying down + if(istype(cur_atom, /mob/living)) + var/mob/living/cur_mob = cur_atom + if(!isxeno(cur_mob) && cur_mob.lying) //xenos don't use icon rotatin for lying. + cur_icon.BecomeLying() + + // Calculate where we are relative to the center of the photo + var/xoff = (cur_atom.x - center.x) * pixel_size + center_offset + var/yoff = (cur_atom.y - center.y) * pixel_size + center_offset + if(istype(cur_atom, /atom/movable)) + xoff += cur_atom:step_x + yoff += cur_atom:step_y + res.Blend(cur_icon, blendMode2iconMode(cur_atom.blend_mode), cur_atom.pixel_x + xoff, cur_atom.pixel_y + yoff) + + CHECK_TICK // Lastly, render any contained effects on top. for(var/turf/the_turf as anything in turfs) // Calculate where we are relative to the center of the photo - var/xoff = (the_turf.x - center.x) * 32 + center_offset - var/yoff = (the_turf.y - center.y) * 32 + center_offset - var/image/IM = getFlatIcon(the_turf.loc) - if(IM) - res.Blend(IM, blendMode2iconMode(the_turf.blend_mode),xoff,yoff) + var/xoff = (the_turf.x - center.x) * pixel_size + center_offset + var/yoff = (the_turf.y - center.y) * pixel_size + center_offset + var/image/cur_icon = getFlatIcon(the_turf.loc) + CHECK_TICK + + if(cur_icon) + res.Blend(cur_icon, blendMode2iconMode(the_turf.blend_mode), xoff, yoff) + CHECK_TICK return res +/obj/item/device/camera/proc/get_mob_descriptions(turf/the_turf, existing_descripion) + var/mob_detail = existing_descripion + for(var/mob/living/carbon/cur_carbon in the_turf) + if(cur_carbon.invisibility) + continue -/obj/item/device/camera/proc/get_mobs(turf/the_turf as turf) - var/mob_detail - for(var/mob/living/carbon/A in the_turf) - if(A.invisibility) continue var/holding = null - if(A.l_hand || A.r_hand) - if(A.l_hand) holding = "They are holding \a [A.l_hand]" - if(A.r_hand) + if(cur_carbon.l_hand || cur_carbon.r_hand) + if(cur_carbon.l_hand) + holding = "They are holding \a [cur_carbon.l_hand]" + if(cur_carbon.r_hand) if(holding) - holding += " and \a [A.r_hand]" + holding += " and \a [cur_carbon.r_hand]" else - holding = "They are holding \a [A.r_hand]" + holding = "They are holding \a [cur_carbon.r_hand]" + + var/hurt = "" + if(cur_carbon.health < 75) + hurt = prob(25) ? " - they look hurt" : " - [cur_carbon] looks hurt" if(!mob_detail) - mob_detail = "You can see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. " + mob_detail = "You can see [cur_carbon] in the photo[hurt].[holding ? " [holding]" : "."]." else - mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." + mob_detail += " You [prob(50) ? "can" : "also"] see [cur_carbon] in the photo[hurt].[holding ? " [holding]" : "."]." return mob_detail /obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!on || !pictures_left || ismob(target.loc) || isstorage(target.loc)) return - if(user.contains(target) || istype(target, /atom/movable/screen)) return - captureimage(target, user, flag) + if(!on || !pictures_left || ismob(target.loc) || isstorage(target.loc)) + return + if(user.contains(target) || istype(target, /atom/movable/screen)) + return playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 15, 1) pictures_left-- desc = "A polaroid camera. It has [pictures_left] photos left." to_chat(user, SPAN_NOTICE("[pictures_left] photos left.")) + + captureimage(target, user, flag) + icon_state = icon_off on = 0 spawn(64) @@ -257,37 +286,46 @@ on = 1 /obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) - var/mobs = "" + var/mob_descriptions = "" var/radius = (size-1)*0.5 var/list/turf/turfs = RANGE_TURFS(radius, target) & view(world_view_size + radius, user.client) - for(var/turf/T as anything in turfs) - mobs += get_mobs(T) - var/datum/picture/P = createpicture(target, user, turfs, mobs, flag) - printpicture(user, P) + for(var/turf/the_turf as anything in turfs) + mob_descriptions = get_mob_descriptions(the_turf, mob_descriptions) + var/datum/picture/the_picture = createpicture(target, user, turfs, mob_descriptions, flag) -/obj/item/device/camera/proc/createpicture(atom/target, mob/user, list/turfs, mobs, flag) + if(QDELETED(user)) + return + + printpicture(user, the_picture) + +/obj/item/device/camera/proc/createpicture(atom/target, mob/user, list/turfs, description, flag) var/icon/photoimage = get_icon(turfs, target) + if(!description) + description = "A very scenic photo" + var/icon/small_img = icon(photoimage) var/icon/tiny_img = icon(photoimage) - var/icon/ic = icon('icons/obj/items/items.dmi',"photo") - var/icon/pc = icon('icons/obj/items/paper.dmi', "photo") + var/icon/item_icon = icon('icons/obj/items/items.dmi',"photo") + var/icon/paper_icon = icon('icons/obj/items/paper.dmi', "photo") small_img.Scale(8, 8) tiny_img.Scale(4, 4) - ic.Blend(small_img,ICON_OVERLAY, 10, 13) - pc.Blend(tiny_img,ICON_OVERLAY, 12, 19) - - var/datum/picture/P = new() - P.fields["author"] = user - P.fields["icon"] = ic - P.fields["tiny"] = pc - P.fields["img"] = photoimage - P.fields["desc"] = mobs - P.fields["pixel_x"] = rand(-10, 10) - P.fields["pixel_y"] = rand(-10, 10) - P.fields["size"] = size - - return P + item_icon.Blend(small_img, ICON_OVERLAY, 10, 13) + CHECK_TICK + paper_icon.Blend(tiny_img, ICON_OVERLAY, 12, 19) + CHECK_TICK + + var/datum/picture/the_picture = new() + the_picture.fields["author"] = user + the_picture.fields["icon"] = item_icon + the_picture.fields["tiny"] = paper_icon + the_picture.fields["img"] = photoimage + the_picture.fields["desc"] = description + the_picture.fields["pixel_x"] = rand(-10, 10) + the_picture.fields["pixel_y"] = rand(-10, 10) + the_picture.fields["size"] = size + + return the_picture /obj/item/device/camera/proc/printpicture(mob/user, datum/picture/P) var/obj/item/photo/Photo = new/obj/item/photo() diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index 1bb1083a9d4f..783b982f10bd 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -2464,9 +2464,6 @@ else M.apply_effect(stun_time, WEAKEN) - - - /datum/ammo/energy/yautja/rifle/bolt name = "plasma rifle bolt" icon_state = "ion" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 88f6e3fb2f5d..e9ab9aecc3c2 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1214,10 +1214,11 @@ and you're good to go. shots_fired++ if(dual_wield && !fired_by_akimbo) - if(user?.client?.prefs?.toggle_prefs & TOGGLE_ALTERNATING_DUAL_WIELD) - user.swap_hand() - else - INVOKE_ASYNC(akimbo, PROC_REF(Fire), target, user, params, 0, TRUE) + switch(user?.client?.prefs?.dual_wield_pref) + if(DUAL_WIELD_FIRE) + INVOKE_ASYNC(akimbo, PROC_REF(Fire), target, user, params, 0, TRUE) + if(DUAL_WIELD_SWAP) + user.swap_hand() else return TRUE @@ -1456,10 +1457,11 @@ and you're good to go. SEND_SIGNAL(user, COMSIG_MOB_FIRED_GUN, src) if(dual_wield && !fired_by_akimbo) - if(user?.client?.prefs?.toggle_prefs & TOGGLE_ALTERNATING_DUAL_WIELD) - user.swap_hand() - else - INVOKE_ASYNC(akimbo, PROC_REF(attack), attacked_mob, user, TRUE) + switch(user?.client?.prefs?.dual_wield_pref) + if(DUAL_WIELD_FIRE) + INVOKE_ASYNC(akimbo, PROC_REF(attack), attacked_mob, user, TRUE) + if(DUAL_WIELD_SWAP) + user.swap_hand() if(EXECUTION_CHECK) //Continue execution if on the correct intent. Accounts for change via the earlier do_after user.visible_message(SPAN_DANGER("[user] has executed [attacked_mob] with [src]!"), SPAN_DANGER("You have executed [attacked_mob] with [src]!"), message_flags = CHAT_TYPE_WEAPON_USE) diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index 698ea8ef5957..20781639a579 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() @@ -3056,9 +3058,6 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/attached_gun/extinguisher/fire_attachment(atom/target, obj/item/weapon/gun/gun, mob/living/user) if(!internal_extinguisher) return - if(!(gun.flags_item & WIELDED)) - to_chat(user, SPAN_WARNING("You must wield [gun] to fire [src]!")) - return if(..()) return internal_extinguisher.afterattack(target, user) @@ -3244,6 +3243,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 +3310,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 +3352,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 +3403,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/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index 4723ad882368..65e4a6f2b7b3 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -435,6 +435,7 @@ accepted_ammo = list( /obj/item/ammo_magazine/rifle, + /obj/item/ammo_magazine/rifle/rubber, /obj/item/ammo_magazine/rifle/extended, /obj/item/ammo_magazine/rifle/ap, /obj/item/ammo_magazine/rifle/incendiary, diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm index 9a4b1551736c..c3b4906c1b29 100644 --- a/code/modules/projectiles/guns/shotguns.dm +++ b/code/modules/projectiles/guns/shotguns.dm @@ -266,14 +266,18 @@ can cause issues with ammo types getting mixed up during the burst. /obj/item/weapon/gun/shotgun/combat/handle_starting_attachment() ..() - var/obj/item/attachable/attached_gun/grenade/G = new(src) - G.flags_attach_features &= ~ATTACH_REMOVABLE - G.hidden = TRUE - G.Attach(src) - update_attachable(G.slot) + var/obj/item/attachable/attached_gun/grenade/ugl = new(src) + var/obj/item/attachable/stock/tactical/stock = new(src) + ugl.flags_attach_features &= ~ATTACH_REMOVABLE + ugl.hidden = TRUE + ugl.Attach(src) + update_attachable(ugl.slot) + stock.hidden = FALSE + stock.Attach(src) + update_attachable(stock.slot) /obj/item/weapon/gun/shotgun/combat/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 21, "under_x" = 14, "under_y" = 16, "stock_x" = 14, "stock_y" = 16) + attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 21, "under_x" = 14, "under_y" = 16, "stock_x" = 11, "stock_y" = 13.) @@ -1274,7 +1278,7 @@ can cause issues with ammo types getting mixed up during the burst. /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/m3717 name = "\improper M37-17 pump shotgun" - desc = "A military version of the iconic HG 37-12, this design can fit one extra shell in each of its dual-tube internal magazines, and fires shells with increased velocity, resulting in more damage. Issued to select USCM vessels out on the rim. You can switch the active internal magazine by toggling the shotgun tube." + desc = "A military version of the iconic HG 37-12, this design can fit one extra shell in each of its dual-tube internal magazines, and fires shells with increased velocity, resulting in more damage. Issued to select USCM vessels and stations in the outer veil. A button on the side toggles the internal tubes." icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' icon_state = "m3717" item_state = "m3717" diff --git a/code/modules/projectiles/guns/specialist.dm b/code/modules/projectiles/guns/specialist.dm deleted file mode 100644 index 71afd0bdd09a..000000000000 --- a/code/modules/projectiles/guns/specialist.dm +++ /dev/null @@ -1,1370 +0,0 @@ -//------------------------------------------------------- -//SNIPER RIFLES -//Keyword rifles. They are subtype of rifles, but still contained here as a specialist weapon. - -//Because this parent type did not exist -//Note that this means that snipers will have a slowdown of 3, due to the scope -/obj/item/weapon/gun/rifle/sniper - aim_slowdown = SLOWDOWN_ADS_SPECIALIST - wield_delay = WIELD_DELAY_SLOW - - var/has_aimed_shot = TRUE - var/aiming_time = 1.25 SECONDS - var/aimed_shot_cooldown - var/aimed_shot_cooldown_delay = 2.5 SECONDS - - var/enable_aimed_shot_laser = TRUE - var/sniper_lockon_icon = "sniper_lockon" - var/obj/effect/ebeam/sniper_beam_type = /obj/effect/ebeam/laser - var/sniper_beam_icon = "laser_beam" - var/skill_locked = TRUE - -/obj/item/weapon/gun/rifle/sniper/get_examine_text(mob/user) - . = ..() - if(!has_aimed_shot) - return - . += SPAN_NOTICE("This weapon has an unique ability, Aimed Shot, allowing it to deal great damage after a windup.
Additionally, the aimed shot can be sped up with a tracking laser, which is enabled by default but may be disabled.") - -/obj/item/weapon/gun/rifle/sniper/Initialize(mapload, spawn_empty) - if(has_aimed_shot) - LAZYADD(actions_types, list(/datum/action/item_action/specialist/aimed_shot, /datum/action/item_action/specialist/toggle_laser)) - return ..() - -/obj/item/weapon/gun/rifle/sniper/able_to_fire(mob/living/user) - . = ..() - if(. && istype(user) && skill_locked) //Let's check all that other stuff first. - if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_SNIPER) - to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) - return 0 - -// Aimed shot ability -/datum/action/item_action/specialist/aimed_shot - ability_primacy = SPEC_PRIMARY_ACTION_2 - var/minimum_aim_distance = 2 - -/datum/action/item_action/specialist/aimed_shot/New(mob/living/user, obj/item/holder) - ..() - name = "Aimed Shot" - button.name = name - button.overlays.Cut() - var/image/IMG = image('icons/mob/hud/actions.dmi', button, "sniper_aim") - button.overlays += IMG - var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item - sniper_rifle.aimed_shot_cooldown = world.time - - -/datum/action/item_action/specialist/aimed_shot/action_activate() - if(!ishuman(owner)) - return - var/mob/living/carbon/human/H = owner - if(H.selected_ability == src) - to_chat(H, "You will no longer use [name] with \ - [H.client && H.client.prefs && H.client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_CLICK ? "middle-click" : "shift-click"].") - button.icon_state = "template" - H.selected_ability = null - else - to_chat(H, "You will now use [name] with \ - [H.client && H.client.prefs && H.client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_CLICK ? "middle-click" : "shift-click"].") - if(H.selected_ability) - H.selected_ability.button.icon_state = "template" - H.selected_ability = null - button.icon_state = "template_on" - H.selected_ability = src - -/datum/action/item_action/specialist/aimed_shot/can_use_action() - var/mob/living/carbon/human/H = owner - if(istype(H) && !H.is_mob_incapacitated() && !H.lying && (holder_item == H.r_hand || holder_item || H.l_hand)) - return TRUE - -/datum/action/item_action/specialist/aimed_shot/proc/use_ability(atom/A) - var/mob/living/carbon/human/human = owner - if(!istype(A, /mob/living)) - return - - var/mob/living/target = A - - if(target.stat == DEAD || target == human) - return - - var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item - if(world.time < sniper_rifle.aimed_shot_cooldown) - return - - if(!check_can_use(target)) - return - - human.face_atom(target) - - ///Add a decisecond to the default 1.5 seconds for each two tiles to hit. - var/distance = round(get_dist(target, human) * 0.5) - var/f_aiming_time = sniper_rifle.aiming_time + distance - - var/aim_multiplier = 1 - var/aiming_buffs - - if(sniper_rifle.enable_aimed_shot_laser) - aim_multiplier = 0.6 - aiming_buffs++ - - if(HAS_TRAIT(target, TRAIT_SPOTTER_LAZED)) - aim_multiplier = 0.5 - aiming_buffs++ - - if(aiming_buffs > 1) - aim_multiplier = 0.35 - - f_aiming_time *= aim_multiplier - - var/image/lockon_icon = image(icon = 'icons/effects/Targeted.dmi', icon_state = sniper_rifle.sniper_lockon_icon) - - var/x_offset = -target.pixel_x + target.base_pixel_x - var/y_offset = (target.icon_size - world.icon_size) * 0.5 - target.pixel_y + target.base_pixel_y - - lockon_icon.pixel_x = x_offset - lockon_icon.pixel_y = y_offset - target.overlays += lockon_icon - - var/image/lockon_direction_icon - if(!sniper_rifle.enable_aimed_shot_laser) - lockon_direction_icon = image(icon = 'icons/effects/Targeted.dmi', icon_state = "[sniper_rifle.sniper_lockon_icon]_direction", dir = get_cardinal_dir(target, human)) - lockon_direction_icon.pixel_x = x_offset - lockon_direction_icon.pixel_y = y_offset - target.overlays += lockon_direction_icon - if(human.client) - playsound_client(human.client, 'sound/weapons/TargetOn.ogg', human, 50) - playsound(target, 'sound/weapons/TargetOn.ogg', 70, FALSE, 8, falloff = 0.4) - - var/datum/beam/laser_beam - if(sniper_rifle.enable_aimed_shot_laser) - laser_beam = target.beam(human, sniper_rifle.sniper_beam_icon, 'icons/effects/beam.dmi', (f_aiming_time + 1 SECONDS), beam_type = sniper_rifle.sniper_beam_type) - laser_beam.visuals.alpha = 0 - animate(laser_beam.visuals, alpha = initial(laser_beam.visuals.alpha), f_aiming_time, easing = SINE_EASING|EASE_OUT) - - ////timer is (f_spotting_time + 1 SECONDS) because sometimes it janks out before the doafter is done. blame sleeps or something - - if(!do_after(human, f_aiming_time, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, NO_BUSY_ICON)) - target.overlays -= lockon_icon - target.overlays -= lockon_direction_icon - qdel(laser_beam) - return - - target.overlays -= lockon_icon - target.overlays -= lockon_direction_icon - qdel(laser_beam) - - if(!check_can_use(target, TRUE)) - return - - var/obj/projectile/aimed_proj = sniper_rifle.in_chamber - aimed_proj.projectile_flags |= PROJECTILE_BULLSEYE - aimed_proj.AddComponent(/datum/component/homing_projectile, target, human) - sniper_rifle.Fire(target, human) - -/datum/action/item_action/specialist/aimed_shot/proc/check_can_use(mob/M, cover_lose_focus) - var/mob/living/carbon/human/H = owner - var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item - - if(!can_use_action()) - return FALSE - - if(sniper_rifle != H.r_hand && sniper_rifle != H.l_hand) - to_chat(H, SPAN_WARNING("How do you expect to do this without your sniper rifle?")) - return FALSE - - if(!(sniper_rifle.flags_item & WIELDED)) - to_chat(H, SPAN_WARNING("Your aim is not stable enough with one hand. Use both hands!")) - return FALSE - - if(!sniper_rifle.in_chamber) - to_chat(H, SPAN_WARNING("\The [sniper_rifle] is unloaded!")) - return FALSE - - if(get_dist(H, M) < minimum_aim_distance) - to_chat(H, SPAN_WARNING("\The [M] is too close to get a proper shot!")) - return FALSE - - var/obj/projectile/P = sniper_rifle.in_chamber - // TODO: Make the below logic only occur in certain circumstances. Check goggles, maybe? -Kaga - if(check_shot_is_blocked(H, M, P)) - to_chat(H, SPAN_WARNING("Something is in the way, or you're out of range!")) - if(cover_lose_focus) - to_chat(H, SPAN_WARNING("You lose focus.")) - COOLDOWN_START(sniper_rifle, aimed_shot_cooldown, sniper_rifle.aimed_shot_cooldown_delay * 0.5) - return FALSE - - COOLDOWN_START(sniper_rifle, aimed_shot_cooldown, sniper_rifle.aimed_shot_cooldown_delay) - return TRUE - -/datum/action/item_action/specialist/aimed_shot/proc/check_shot_is_blocked(mob/firer, mob/target, obj/projectile/P) - var/list/turf/path = getline2(firer, target, include_from_atom = FALSE) - if(!path.len || get_dist(firer, target) > P.ammo.max_range) - return TRUE - - var/blocked = FALSE - for(var/turf/T in path) - if(T.density || T.opacity) - blocked = TRUE - break - - for(var/obj/O in T) - if(O.get_projectile_hit_boolean(P)) - blocked = TRUE - break - - for(var/obj/effect/particle_effect/smoke/S in T) - blocked = TRUE - break - - return blocked - -// Snipers may enable or disable their laser tracker at will. -/datum/action/item_action/specialist/toggle_laser - -/datum/action/item_action/specialist/toggle_laser/New(mob/living/user, obj/item/holder) - ..() - name = "Toggle Tracker Laser" - button.name = name - button.overlays.Cut() - var/image/IMG = image('icons/mob/hud/actions.dmi', button, "sniper_toggle_laser_on") - button.overlays += IMG - update_button_icon() - -/datum/action/item_action/specialist/toggle_laser/update_button_icon() - var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item - - var/icon = 'icons/mob/hud/actions.dmi' - var/icon_state = "sniper_toggle_laser_[sniper_rifle.enable_aimed_shot_laser ? "on" : "off"]" - - button.overlays.Cut() - var/image/IMG = image(icon, button, icon_state) - button.overlays += IMG - -/datum/action/item_action/specialist/toggle_laser/can_use_action() - var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item - - if(owner.is_mob_incapacitated()) - return FALSE - - if(owner.get_held_item() != sniper_rifle) - to_chat(owner, SPAN_WARNING("How do you expect to do this without the sniper rifle in your hand?")) - return FALSE - return TRUE - -/datum/action/item_action/specialist/toggle_laser/action_activate() - var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item - - if(owner.get_held_item() != sniper_rifle) - to_chat(owner, SPAN_WARNING("How do you expect to do this without the sniper rifle in your hand?")) - return FALSE - sniper_rifle.toggle_laser(owner, src) - -/obj/item/weapon/gun/rifle/sniper/proc/toggle_laser(mob/user, datum/action/toggling_action) - enable_aimed_shot_laser = !enable_aimed_shot_laser - to_chat(user, SPAN_NOTICE("You flip a switch on \the [src] and [enable_aimed_shot_laser ? "enable" : "disable"] its targeting laser.")) - playsound(user, 'sound/machines/click.ogg', 15, TRUE) - if(!toggling_action) - toggling_action = locate(/datum/action/item_action/specialist/toggle_laser) in actions - if(toggling_action) - toggling_action.update_button_icon() - -/obj/item/weapon/gun/rifle/sniper/verb/toggle_gun_laser() - set category = "Weapons" - set name = "Toggle Laser" - set desc = "Toggles your laser on or off." - set src = usr.contents - - var/obj/item/weapon/gun/rifle/sniper/sniper = get_active_firearm(usr) - if((sniper == src) && has_aimed_shot) - toggle_laser(usr) - -//Pow! Headshot. -/obj/item/weapon/gun/rifle/sniper/M42A - name = "\improper M42A scoped rifle" - desc = "A heavy sniper rifle manufactured by Armat Systems. It has a scope system and fires armor penetrating rounds out of a 15-round magazine.\n'Peace Through Superior Firepower'" - icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "m42a" - item_state = "m42a" - unacidable = TRUE - indestructible = 1 - - fire_sound = 'sound/weapons/gun_sniper.ogg' - current_mag = /obj/item/ammo_magazine/sniper - force = 12 - wield_delay = WIELD_DELAY_HORRIBLE //Ends up being 1.6 seconds due to scope - zoomdevicename = "scope" - attachable_allowed = list(/obj/item/attachable/bipod) - starting_attachment_types = list(/obj/item/attachable/sniperbarrel) - flags_gun_features = GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER - map_specific_decoration = TRUE - - flags_item = TWOHANDED|NO_CRYO_STORE - -/obj/item/weapon/gun/rifle/sniper/M42A/verb/toggle_scope_zoom_level() - set name = "Toggle Scope Zoom Level" - set category = "Weapons" - set src in usr - var/obj/item/attachable/scope/variable_zoom/S = attachments["rail"] - S.toggle_zoom_level() - -/obj/item/weapon/gun/rifle/sniper/M42A/handle_starting_attachment() - ..() - var/obj/item/attachable/scope/variable_zoom/S = new(src) - S.hidden = TRUE - S.flags_attach_features &= ~ATTACH_REMOVABLE - S.Attach(src) - update_attachable(S.slot) - -/obj/item/weapon/gun/rifle/sniper/M42A/set_bullet_traits() - LAZYADD(traits_to_give, list( - BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) - )) - -/obj/item/weapon/gun/rifle/sniper/M42A/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 39, "muzzle_y" = 17,"rail_x" = 12, "rail_y" = 20, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) - - -/obj/item/weapon/gun/rifle/sniper/M42A/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_7*3) - set_burst_amount(BURST_AMOUNT_TIER_1) - accuracy_mult = BASE_ACCURACY_MULT * 3 //you HAVE to be able to hit - scatter = SCATTER_AMOUNT_TIER_8 - damage_mult = BASE_BULLET_DAMAGE_MULT - recoil = RECOIL_AMOUNT_TIER_5 - -/obj/item/weapon/gun/rifle/sniper/xm43e1 - name = "\improper XM43E1 experimental anti-materiel rifle" - desc = "An experimental anti-materiel rifle produced by Armat Systems, recently reacquired from the deep storage of an abandoned prototyping facility. This one in particular is currently undergoing field testing. Chambered in 10x99mm Caseless." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "xm42b" - item_state = "xm42b" - unacidable = TRUE - indestructible = 1 - - fire_sound = 'sound/weapons/sniper_heavy.ogg' - current_mag = /obj/item/ammo_magazine/sniper/anti_materiel //Renamed from anti-tank to align with new identity/description. Other references have been changed as well. -Kaga - force = 12 - wield_delay = WIELD_DELAY_HORRIBLE //Ends up being 1.6 seconds due to scope - zoomdevicename = "scope" - attachable_allowed = list(/obj/item/attachable/bipod) - flags_gun_features = GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER - starting_attachment_types = list(/obj/item/attachable/sniperbarrel) - sniper_beam_type = /obj/effect/ebeam/laser/intense - sniper_beam_icon = "laser_beam_intense" - sniper_lockon_icon = "sniper_lockon_intense" - -/obj/item/weapon/gun/rifle/sniper/XM42B/handle_starting_attachment() - ..() - var/obj/item/attachable/scope/variable_zoom/S = new(src) - S.icon_state = "pmcscope" - S.attach_icon = "pmcscope" - S.flags_attach_features &= ~ATTACH_REMOVABLE - S.Attach(src) - update_attachable(S.slot) - - -/obj/item/weapon/gun/rifle/sniper/XM42B/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 15, "rail_y" = 19, "under_x" = 20, "under_y" = 15, "stock_x" = 20, "stock_y" = 15) - - -/obj/item/weapon/gun/rifle/sniper/XM42B/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_6 * 6 )//Big boy damage, but it takes a lot of time to fire a shot. - //Kaga: Adjusted from 56 (Tier 4, 7*8) -> 30 (Tier 6, 5*6) ticks. 95 really wasn't big-boy damage anymore, although I updated it to 125 to remain consistent with the other 10x99mm caliber weapon (M42C). Now takes only twice as long as the M42A. - set_burst_amount(BURST_AMOUNT_TIER_1) - accuracy_mult = BASE_ACCURACY_MULT + 2*HIT_ACCURACY_MULT_TIER_10 //Who coded this like this, and why? It just calculates out to 1+1=2. Leaving a note here to check back later. - scatter = SCATTER_AMOUNT_TIER_10 - damage_mult = BASE_BULLET_DAMAGE_MULT - recoil = RECOIL_AMOUNT_TIER_1 - -/obj/item/weapon/gun/rifle/sniper/XM42B/set_bullet_traits() - LAZYADD(traits_to_give, list( - BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff), - BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_penetrating), - BULLET_TRAIT_ENTRY_ID("turfs", /datum/element/bullet_trait_damage_boost, 11, GLOB.damage_boost_turfs), - BULLET_TRAIT_ENTRY_ID("breaching", /datum/element/bullet_trait_damage_boost, 11, GLOB.damage_boost_breaching), - //At 1375 per shot it'll take 1 shot to break resin turfs, and a full mag of 8 to break reinforced walls. - BULLET_TRAIT_ENTRY_ID("pylons", /datum/element/bullet_trait_damage_boost, 6, GLOB.damage_boost_pylons) - //At 750 per shot it'll take 3 to break a Pylon (1800 HP). No Damage Boost vs other xeno structures yet, those will require a whole new list w/ the damage_boost trait. - )) - -/* -//Disabled until an identity is better defined. -Kaga -/obj/item/weapon/gun/rifle/sniper/M42B/afterattack(atom/target, mob/user, flag) - if(able_to_fire(user)) - if(get_dist(target,user) <= 8) - to_chat(user, SPAN_WARNING("The [src.name] beeps, indicating that the target is within an unsafe proximity to the rifle, refusing to fire.")) - return - else ..() -*/ - -/obj/item/weapon/gun/rifle/sniper/elite - name = "\improper M42C anti-tank sniper rifle" - desc = "A high-end superheavy magrail sniper rifle from Weyland-Armat chambered in a specialized variant of the heaviest ammo available, 10x99mm Caseless. This weapon requires a specialized armor rig for recoil mitigation in order to be used effectively." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/wy.dmi' - icon_state = "m42c" - item_state = "m42c" //NEEDS A TWOHANDED STATE - - fire_sound = 'sound/weapons/sniper_heavy.ogg' - current_mag = /obj/item/ammo_magazine/sniper/elite - force = 17 - zoomdevicename = "scope" - flags_gun_features = GUN_AUTO_EJECTOR|GUN_WY_RESTRICTED|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER - starting_attachment_types = list(/obj/item/attachable/sniperbarrel) - sniper_beam_type = /obj/effect/ebeam/laser/intense - sniper_beam_icon = "laser_beam_intense" - sniper_lockon_icon = "sniper_lockon_intense" - -/obj/item/weapon/gun/rifle/sniper/elite/handle_starting_attachment() - ..() - var/obj/item/attachable/scope/S = new(src) - S.icon_state = "pmcscope" - S.attach_icon = "pmcscope" - S.flags_attach_features &= ~ATTACH_REMOVABLE - S.Attach(src) - update_attachable(S.slot) - -/obj/item/weapon/gun/rifle/sniper/elite/set_bullet_traits() - LAZYADD(traits_to_give, list( - BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) - )) - -/obj/item/weapon/gun/rifle/sniper/elite/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 15, "rail_y" = 19, "under_x" = 20, "under_y" = 15, "stock_x" = 20, "stock_y" = 15) - -/obj/item/weapon/gun/rifle/sniper/elite/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_6*5) - set_burst_amount(BURST_AMOUNT_TIER_1) - accuracy_mult = BASE_ACCURACY_MULT * 3 //Was previously BAM + HAMT10, similar to the XM42B, and coming out to 1.5? Changed to be consistent with M42A. -Kaga - scatter = SCATTER_AMOUNT_TIER_10 //Was previously 8, changed to be consistent with the XM42B. - damage_mult = BASE_BULLET_DAMAGE_MULT - recoil = RECOIL_AMOUNT_TIER_1 - -/obj/item/weapon/gun/rifle/sniper/elite/simulate_recoil(total_recoil = 0, mob/user, atom/target) - . = ..() - if(.) - var/mob/living/carbon/human/PMC_sniper = user - if(PMC_sniper.lying == 0 && !istype(PMC_sniper.wear_suit,/obj/item/clothing/suit/storage/marine/smartgunner/veteran/pmc) && !istype(PMC_sniper.wear_suit,/obj/item/clothing/suit/storage/marine/veteran)) - PMC_sniper.visible_message(SPAN_WARNING("[PMC_sniper] is blown backwards from the recoil of the [src.name]!"),SPAN_HIGHDANGER("You are knocked prone by the blowback!")) - step(PMC_sniper,turn(PMC_sniper.dir,180)) - PMC_sniper.apply_effect(5, WEAKEN) - -//Type 88 //Based on the actual Dragunov DMR rifle. - -/obj/item/weapon/gun/rifle/sniper/svd - name = "\improper Type 88 designated marksman rifle" - desc = "The standard issue DMR of the UPP, the Type 88 is sought after by competitive shooters and terrorists alike for its high degree of accuracy. Typically loaded with armor-piercing 7.62x54mmR rounds in a 12 round magazine." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi' - icon_state = "type88" - item_state = "type88" - - fire_sound = 'sound/weapons/gun_mg.ogg' - current_mag = /obj/item/ammo_magazine/sniper/svd - attachable_allowed = list( - //Muzzle, - /obj/item/attachable/bayonet, - /obj/item/attachable/bayonet/upp_replica, - /obj/item/attachable/bayonet/upp, - //Under, - /obj/item/attachable/verticalgrip, - /obj/item/attachable/bipod, - //Integrated, - /obj/item/attachable/type88_barrel, - ) - has_aimed_shot = FALSE - flags_gun_features = GUN_AUTO_EJECTOR|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK - starting_attachment_types = list() - sniper_beam_type = null - skill_locked = FALSE - -/obj/item/weapon/gun/rifle/sniper/svd/handle_starting_attachment() - ..() - var/obj/item/attachable/attachie = new /obj/item/attachable/type88_barrel(src) - attachie.flags_attach_features &= ~ATTACH_REMOVABLE - attachie.Attach(src) - update_attachable(attachie.slot) - - var/obj/item/attachable/scope/variable_zoom/integrated/type88sight = new(src) - type88sight.flags_attach_features &= ~ATTACH_REMOVABLE - type88sight.hidden = TRUE - type88sight.Attach(src) - update_attachable(type88sight.slot) - -/obj/item/weapon/gun/rifle/sniper/svd/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 13, "rail_y" = 19, "under_x" = 26, "under_y" = 14, "stock_x" = 24, "stock_y" = 13, "special_x" = 39, "special_y" = 18) - -/obj/item/weapon/gun/rifle/sniper/svd/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_6) - set_burst_amount(BURST_AMOUNT_TIER_1) - accuracy_mult = BASE_ACCURACY_MULT * 3 - scatter = SCATTER_AMOUNT_TIER_8 - damage_mult = BASE_BULLET_DAMAGE_MULT - recoil = RECOIL_AMOUNT_TIER_5 - damage_falloff_mult = 0 - -//M4RA custom marksman rifle - -/obj/item/weapon/gun/rifle/m4ra_custom - name = "\improper M4RA custom battle rifle" - desc = "This is a further improvement upon the already rock-solid M4RA. Made by the USCM armorers on Chinook station - This variant of the M4RA has a specifically milled magazine well to accept A19 rounds. It sports a light-weight titantium-alloy frame, better responsive to the heavy kick of the tailor-made A19 rounds." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "m4ra_custom" - item_state = "m4ra_custom" - unacidable = TRUE - indestructible = 1 - accepted_ammo = list( - /obj/item/ammo_magazine/rifle/m4ra, - /obj/item/ammo_magazine/rifle/m4ra/ap, - /obj/item/ammo_magazine/rifle/m4ra/ext, - /obj/item/ammo_magazine/rifle/m4ra/rubber, - /obj/item/ammo_magazine/rifle/m4ra/incendiary, - /obj/item/ammo_magazine/rifle/m4ra/heap, - /obj/item/ammo_magazine/rifle/m4ra/penetrating, - /obj/item/ammo_magazine/rifle/m4ra/custom, - /obj/item/ammo_magazine/rifle/m4ra/custom/incendiary, - /obj/item/ammo_magazine/rifle/m4ra/custom/impact, - - ) - - fire_sound = 'sound/weapons/gun_m4ra.ogg' - reload_sound = 'sound/weapons/handling/l42_reload.ogg' - unload_sound = 'sound/weapons/handling/l42_unload.ogg' - current_mag = /obj/item/ammo_magazine/rifle/m4ra/custom - force = 26 - attachable_allowed = list( - /obj/item/attachable/suppressor, - /obj/item/attachable/bayonet, - /obj/item/attachable/bayonet/upp, - /obj/item/attachable/bayonet/co2, - /obj/item/attachable/reddot, - /obj/item/attachable/reflex, - /obj/item/attachable/flashlight, - /obj/item/attachable/extended_barrel, - /obj/item/attachable/magnetic_harness, - /obj/item/attachable/bipod, - /obj/item/attachable/attached_gun/shotgun, - /obj/item/attachable/verticalgrip, - /obj/item/attachable/angledgrip, - /obj/item/attachable/lasersight, - /obj/item/attachable/scope, - /obj/item/attachable/scope/mini, - /obj/item/attachable/flashlight/grip, - ) - - flags_gun_features = GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER - map_specific_decoration = TRUE - aim_slowdown = SLOWDOWN_ADS_QUICK - flags_item = TWOHANDED|NO_CRYO_STORE - -/obj/item/weapon/gun/rifle/m4ra_custom/handle_starting_attachment() - ..() - var/obj/item/attachable/m4ra_barrel_custom/integrated = new(src) - integrated.flags_attach_features &= ~ATTACH_REMOVABLE - integrated.Attach(src) - update_attachable(integrated.slot) - - -/obj/item/weapon/gun/rifle/m4ra_custom/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 43, "muzzle_y" = 17,"rail_x" = 23, "rail_y" = 21, "under_x" = 30, "under_y" = 11, "stock_x" = 24, "stock_y" = 13, "special_x" = 37, "special_y" = 16) - -/obj/item/weapon/gun/rifle/m4ra_custom/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_6) - set_burst_amount(BURST_AMOUNT_TIER_2) - set_burst_delay(FIRE_DELAY_TIER_12) - accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_2 - scatter = SCATTER_AMOUNT_TIER_8 - burst_scatter_mult = SCATTER_AMOUNT_TIER_8 - damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_2 - recoil = RECOIL_AMOUNT_TIER_5 - damage_falloff_mult = 0 - -/obj/item/weapon/gun/rifle/m4ra_custom/able_to_fire(mob/living/user) - . = ..() - if (. && istype(user)) //Let's check all that other stuff first. - if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_SCOUT) - to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) - return FALSE - -//------------------------------------------------------- -//HEAVY WEAPONS - -/obj/item/weapon/gun/launcher - gun_category = GUN_CATEGORY_HEAVY - has_empty_icon = FALSE - has_open_icon = FALSE - ///gun update_icon doesn't detect that guns with no magazine are loaded or not, and will always append _o or _e if possible. - var/GL_has_empty_icon = TRUE - ///gun update_icon doesn't detect that guns with no magazine are loaded or not, and will always append _o or _e if possible. - var/GL_has_open_icon = FALSE - - ///Internal storage item used as magazine. Must be initialised to work! Set parameters by variables or it will inherit standard numbers from storage.dm. Got to call it *something* and 'magazine' or w/e would be confusing. - var/obj/item/storage/internal/cylinder - /// Variable that initializes the above. - var/has_cylinder = FALSE - ///What single item to fill the storage with, if any. This does not respect w_class. - var/preload - ///How many items can be inserted. "Null" = backpack-style size-based inventory. You'll have to set max_storage_space too if you do that, and arrange any initial contents. Iff you arrange to put in more items than the storage can hold, they can be taken out but not replaced. - var/internal_slots - ///how big an item can be inserted. - var/internal_max_w_class - ///the sfx played when the storage is opened. - var/use_sound = null - ///Whether clicking a held weapon with an empty hand will open its inventory or draw a munition out. - var/direct_draw = TRUE - -/obj/item/weapon/gun/launcher/Initialize(mapload, spawn_empty) //If changing vars on init, be sure to do the parent proccall *after* the change. - . = ..() - if(has_cylinder) - cylinder = new /obj/item/storage/internal(src) - cylinder.storage_slots = internal_slots - cylinder.max_w_class = internal_max_w_class - cylinder.use_sound = use_sound - if(direct_draw) - cylinder.storage_flags ^= STORAGE_USING_DRAWING_METHOD - if(preload && !spawn_empty) for(var/i = 1 to cylinder.storage_slots) - new preload(cylinder) - update_icon() - -/obj/item/weapon/gun/launcher/verb/toggle_draw_mode() - set name = "Switch Storage Drawing Method" - set category = "Object" - set src in usr - - cylinder.storage_draw_logic(src.name) - -//------------------------------------------------------- -//GRENADE LAUNCHER - -/obj/item/weapon/gun/launcher/grenade //Parent item for GLs. - w_class = SIZE_LARGE - throw_speed = SPEED_SLOW - throw_range = 10 - force = 5 - - fire_sound = 'sound/weapons/armbomb.ogg' - cocked_sound = 'sound/weapons/gun_m92_cocked.ogg' - reload_sound = 'sound/weapons/gun_shotgun_open2.ogg' //Played when inserting nade. - unload_sound = 'sound/weapons/gun_revolver_unload.ogg' - - has_cylinder = TRUE //This weapon won't work otherwise. - preload = /obj/item/explosive/grenade/high_explosive - internal_slots = 1 //This weapon must use slots. - internal_max_w_class = SIZE_MEDIUM //MEDIUM = M15. - - aim_slowdown = SLOWDOWN_ADS_SPECIALIST - wield_delay = WIELD_DELAY_SLOW - flags_gun_features = GUN_UNUSUAL_DESIGN|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY - ///Can you access the storage by clicking it, put things into it, or take things out? Meant for break-actions mostly but useful for any state where you want access to be toggleable. Make sure to call cylinder.close(user) so they don't still have the screen open! - var/open_chamber = TRUE - ///Does it launch its grenades in a low arc or a high? Do they strike people in their path, or fly beyond? - var/is_lobbing = FALSE - ///Verboten munitions. This is a blacklist. Anything in this list isn't loadable. - var/disallowed_grenade_types = list(/obj/item/explosive/grenade/spawnergrenade, /obj/item/explosive/grenade/alien, /obj/item/explosive/grenade/incendiary/molotov, /obj/item/explosive/grenade/flashbang) - ///What is this weapon permitted to fire? This is a whitelist. Anything in this list can be fired. Anything. - var/valid_munitions = list(/obj/item/explosive/grenade) - - -/obj/item/weapon/gun/launcher/grenade/set_gun_config_values() - ..() - recoil = RECOIL_AMOUNT_TIER_4 //Same as m37 shotgun. - - -/obj/item/weapon/gun/launcher/grenade/on_pocket_insertion() //Plays load sfx whenever a nade is put into storage. - playsound(usr, reload_sound, 25, 1) - update_icon() - -/obj/item/weapon/gun/launcher/grenade/on_pocket_removal() - update_icon() - -/obj/item/weapon/gun/launcher/grenade/get_examine_text(mob/user) //Different treatment for single-shot VS multi-shot GLs. - . = ..() - if(get_dist(user, src) > 2 && user != loc) - return - if(length(cylinder.contents)) - if(internal_slots == 1) - . += SPAN_NOTICE("It is loaded with a grenade.") - else - . += SPAN_NOTICE("It is loaded with [length(cylinder.contents)] / [internal_slots] grenades.") - else - . += SPAN_NOTICE("It is empty.") - - -/obj/item/weapon/gun/launcher/grenade/update_icon() - ..() - var/GL_sprite = base_gun_icon - if(GL_has_empty_icon && cylinder && !length(cylinder.contents)) - GL_sprite += "_e" - playsound(loc, cocked_sound, 25, 1) - if(GL_has_open_icon && open_chamber) - GL_sprite += "_o" - playsound(loc, cocked_sound, 25, 1) - icon_state = GL_sprite - - -/obj/item/weapon/gun/launcher/grenade/attack_hand(mob/user) - if(!open_chamber || src != user.get_inactive_hand()) //Need to have the GL in your hands to open the cylinder. - return ..() - if(cylinder.handle_attack_hand(user)) - ..() - - -/obj/item/weapon/gun/launcher/grenade/unload(mob/user, reload_override = FALSE, drop_override = FALSE, loc_override = FALSE) - if(!open_chamber) - to_chat(user, SPAN_WARNING("[src] is closed!")) - return - if(!length(cylinder.contents)) - to_chat(user, SPAN_WARNING("It's empty!")) - return - - var/obj/item/explosive/grenade/nade = cylinder.contents[length(cylinder.contents)] //Grab the last-inserted one. Or the only one, as the case may be. - cylinder.remove_from_storage(nade, user.loc) - - if(drop_override || !user) - nade.forceMove(get_turf(src)) - else - user.put_in_hands(nade) - - user.visible_message(SPAN_NOTICE("[user] unloads [nade] from [src]."), - SPAN_NOTICE("You unload [nade] from [src]."), null, 4, CHAT_TYPE_COMBAT_ACTION) - playsound(user, unload_sound, 30, 1) - - -/obj/item/weapon/gun/launcher/grenade/attackby(obj/item/I, mob/user) - if(istype(I,/obj/item/attachable) && check_inactive_hand(user)) - attach_to_gun(user,I) - return - return cylinder.attackby(I, user) - -/obj/item/weapon/gun/launcher/grenade/unique_action(mob/user) - if(isobserver(usr) || isxeno(usr)) - return - if(locate(/datum/action/item_action/toggle_firing_level) in actions) - toggle_firing_level(usr) - -/obj/item/weapon/gun/launcher/grenade/proc/allowed_ammo_type(obj/item/I) - for(var/G in disallowed_grenade_types) //Check for the bad stuff. - if(istype(I, G)) - return FALSE - for(var/G in valid_munitions) //Check if it has a ticket. - if(istype(I, G)) - return TRUE - - -/obj/item/weapon/gun/launcher/grenade/on_pocket_attackby(obj/item/explosive/grenade/I, mob/user) //the attack in question is on the internal container. Complete override - normal storage attackby cannot be silenced, and will always say "you put the x into y". - if(!open_chamber) - to_chat(user, SPAN_WARNING("[src] is closed!")) - return - if(!istype(I)) - to_chat(user, SPAN_WARNING("You can't load [I] into [src]!")) - return - if(!allowed_ammo_type(I)) - to_chat(user, SPAN_WARNING("[src] can't fire this type of grenade!")) - return - if(length(cylinder.contents) >= internal_slots) - to_chat(user, SPAN_WARNING("[src] cannot hold more grenades!")) - return - if(!cylinder.can_be_inserted(I, user)) //Technically includes whether there's room for it, but the above gives a tailored message. - return - - user.visible_message(SPAN_NOTICE("[user] loads [I] into [src]."), - SPAN_NOTICE("You load [I] into the grenade launcher."), null, 4, CHAT_TYPE_COMBAT_ACTION) - playsound(usr, reload_sound, 75, 1) - if(internal_slots > 1) - to_chat(user, SPAN_INFO("Now storing: [length(cylinder.contents) + 1] / [internal_slots] grenades.")) - - cylinder.handle_item_insertion(I, TRUE, user) - - -/obj/item/weapon/gun/launcher/grenade/able_to_fire(mob/living/user) //Skillchecks and fire blockers go in the child items. - . = ..() - if(.) - if(!length(cylinder.contents)) - to_chat(user, SPAN_WARNING("The [name] is empty.")) - return FALSE - var/obj/item/explosive/grenade/G = cylinder.contents[1] - if(G.antigrief_protection && user.faction == FACTION_MARINE && explosive_antigrief_check(G, user)) - to_chat(user, SPAN_WARNING("\The [name]'s safe-area accident inhibitor prevents you from firing!")) - msg_admin_niche("[key_name(user)] attempted to prime \a [G.name] in [get_area(src)] [ADMIN_JMP(src.loc)]") - return FALSE - - -/obj/item/weapon/gun/launcher/grenade/afterattack(atom/target, mob/user, flag) //Not actually after the attack. After click, more like. - if(able_to_fire(user)) - if(get_dist(target,user) <= 2) - var/obj/item/explosive/grenade/nade = cylinder.contents[1] - if(nade.dangerous) - to_chat(user, SPAN_WARNING("The grenade launcher beeps a warning noise. You are too close!")) - return - fire_grenade(target,user) - - -/obj/item/weapon/gun/launcher/grenade/proc/fire_grenade(atom/target, mob/user) - set waitfor = 0 - last_fired = world.time - - var/to_firer = "You fire the [name]!" - if(internal_slots > 1) - to_firer += " [length(cylinder.contents)-1]/[internal_slots] grenades remaining." - user.visible_message(SPAN_DANGER("[user] fired a grenade!"), - SPAN_WARNING("[to_firer]"), message_flags = CHAT_TYPE_WEAPON_USE) - playsound(user.loc, fire_sound, 50, 1) - - var/angle = round(Get_Angle(user,target)) - muzzle_flash(angle,user) - simulate_recoil(0, user) - - var/obj/item/explosive/grenade/fired = cylinder.contents[1] - cylinder.remove_from_storage(fired, user.loc) - var/pass_flags = NO_FLAGS - if(is_lobbing) - if(istype(fired, /obj/item/explosive/grenade/slug/baton)) - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - human_user.remember_dropped_object(fired) - fired.fingerprintslast = key_name(user) - pass_flags |= PASS_MOB_THRU_HUMAN|PASS_MOB_IS_OTHER|PASS_OVER - else - pass_flags |= PASS_MOB_THRU|PASS_HIGH_OVER - - msg_admin_attack("[key_name_admin(user)] fired a grenade ([fired.name]) from \a ([name]).") - log_game("[key_name_admin(user)] used a grenade ([name]).") - - fired.throw_range = 20 - fired.det_time = min(10, fired.det_time) - fired.activate(user, FALSE) - fired.forceMove(get_turf(src)) - fired.throw_atom(target, 20, SPEED_VERY_FAST, user, null, NORMAL_LAUNCH, pass_flags) - - - -//Doesn't use these. Listed for reference. -/obj/item/weapon/gun/launcher/grenade/load_into_chamber() - return -/obj/item/weapon/gun/launcher/grenade/reload_into_chamber() - return - -/obj/item/weapon/gun/launcher/grenade/has_ammunition() - return length(cylinder.contents) - -//------------------------------------------------------- -//Toggle firing level special action for grenade launchers - -/datum/action/item_action/toggle_firing_level/New(Target, obj/item/holder) - . = ..() - name = "Toggle Firing Level" - button.name = name - update_icon() - -/datum/action/item_action/toggle_firing_level/action_activate() - var/obj/item/weapon/gun/launcher/grenade/G = holder_item - if(!ishuman(owner)) - return - var/mob/living/carbon/human/H = owner - if(H.is_mob_incapacitated() || G.get_active_firearm(H, FALSE) != holder_item) - return - G.toggle_firing_level(usr) - -/datum/action/item_action/toggle_firing_level/proc/update_icon() - var/obj/item/weapon/gun/launcher/grenade/G = holder_item - if(G.is_lobbing) - action_icon_state = "hightoss_on" - else - action_icon_state = "hightoss_off" - button.overlays.Cut() - button.overlays += image('icons/mob/hud/actions.dmi', button, action_icon_state) - -/obj/item/weapon/gun/launcher/grenade/proc/toggle_firing_level(mob/user) - is_lobbing = !is_lobbing - to_chat(user, "[icon2html(src, usr)] You changed \the [src]'s firing level. You will now fire [is_lobbing ? "in an arcing path over obstacles" : "directly at your target"].") - playsound(loc,'sound/machines/click.ogg', 25, 1) - var/datum/action/item_action/toggle_firing_level/TFL = locate(/datum/action/item_action/toggle_firing_level) in actions - TFL.update_icon() - -//------------------------------------------------------- -//M92 GRENADE LAUNCHER - -/obj/item/weapon/gun/launcher/grenade/m92 - name = "\improper M92 grenade launcher" - desc = "A heavy, 6-shot grenade launcher used by the Colonial Marines for area denial and big explosions." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "m92" - item_state = "m92" - unacidable = TRUE - indestructible = 1 - matter = list("metal" = 6000) - actions_types = list(/datum/action/item_action/toggle_firing_level) - - attachable_allowed = list(/obj/item/attachable/magnetic_harness) - flags_item = TWOHANDED|NO_CRYO_STORE - map_specific_decoration = TRUE - - is_lobbing = TRUE - internal_slots = 6 - direct_draw = FALSE - -/obj/item/weapon/gun/launcher/grenade/m92/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 14, "rail_y" = 22, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) - -/obj/item/weapon/gun/launcher/grenade/m92/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_4*4) - -/obj/item/weapon/gun/launcher/grenade/m92/able_to_fire(mob/living/user) - . = ..() - if (. && istype(user)) - if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_GRENADIER) - to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) - return FALSE - - -//------------------------------------------------------- -//M81 GRENADE LAUNCHER - -/obj/item/weapon/gun/launcher/grenade/m81 - name = "\improper M81 grenade launcher" - desc = "A lightweight, single-shot low-angle grenade launcher used by the Colonial Marines for area denial and big explosions." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi' - icon_state = "m81" - item_state = "m81" //needs a wield sprite. - - matter = list("metal" = 7000) - -/obj/item/weapon/gun/launcher/grenade/m81/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 14, "rail_y" = 22, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) - -/obj/item/weapon/gun/launcher/grenade/m81/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_4 * 1.5) - -/obj/item/weapon/gun/launcher/grenade/m81/on_pocket_removal() - ..() - playsound(usr, unload_sound, 30, 1) - -/obj/item/weapon/gun/launcher/grenade/m81/riot/able_to_fire(mob/living/user) - . = ..() - if (. && istype(user)) - if(!skillcheck(user, SKILL_POLICE, SKILL_POLICE_SKILLED)) - to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) - return FALSE - - -/obj/item/weapon/gun/launcher/grenade/m81/riot - name = "\improper M81 riot grenade launcher" - desc = "A lightweight, single-shot low-angle grenade launcher to launch tear gas grenades. Used by the Colonial Marines Military Police during riots." - valid_munitions = list(/obj/item/explosive/grenade/custom/teargas) - preload = /obj/item/explosive/grenade/custom/teargas - -//------------------------------------------------------- -//M79 Grenade Launcher subtype of the M81 - -/obj/item/weapon/gun/launcher/grenade/m81/m79//m79 variant for marines - name = "\improper M79 grenade launcher" - desc = "A heavy, low-angle 40mm grenade launcher. It's been in use since the Vietnam War, though this version has been modernized with an IFF enabled micro-computer. The wooden furniture is, in fact, made of painted hardened polykevlon." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "m79" - item_state = "m79" - flags_equip_slot = SLOT_BACK - preload = /obj/item/explosive/grenade/slug/baton - is_lobbing = TRUE - actions_types = list(/datum/action/item_action/toggle_firing_level) - - fire_sound = 'sound/weapons/handling/m79_shoot.ogg' - cocked_sound = 'sound/weapons/handling/m79_break_open.ogg' - reload_sound = 'sound/weapons/handling/m79_reload.ogg' - unload_sound = 'sound/weapons/handling/m79_unload.ogg' - - attachable_allowed = list( - /obj/item/attachable/magnetic_harness, - /obj/item/attachable/flashlight, - /obj/item/attachable/reddot, - /obj/item/attachable/reflex, - /obj/item/attachable/stock/m79, - ) - -/obj/item/weapon/gun/launcher/grenade/m81/m79/handle_starting_attachment() - ..() - var/obj/item/attachable/stock/m79/S = new(src) - S.hidden = FALSE - S.flags_attach_features &= ~ATTACH_REMOVABLE - S.Attach(src) - update_attachable(S.slot) - -/obj/item/weapon/gun/launcher/grenade/m81/m79/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 9, "rail_y" = 22, "under_x" = 19, "under_y" = 14, "stock_x" = 14, "stock_y" = 14) - -/obj/item/weapon/gun/launcher/grenade/m81/m79/set_bullet_traits() - LAZYADD(traits_to_give, list( - BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff)//might not need this because of is_lobbing, but let's keep it just incase - )) - -//------------------------------------------------------- -//M5 RPG - -/obj/item/weapon/gun/launcher/rocket - name = "\improper M5 RPG" - desc = "The M5 RPG is the primary anti-armor weapon of the USCM. Used to take out light-tanks and enemy structures, the M5 RPG is a dangerous weapon with a variety of combat uses." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "m5" - item_state = "m5" - unacidable = TRUE - indestructible = 1 - - matter = list("metal" = 10000) - current_mag = /obj/item/ammo_magazine/rocket - flags_equip_slot = NO_FLAGS - w_class = SIZE_HUGE - force = 15 - wield_delay = WIELD_DELAY_HORRIBLE - delay_style = WEAPON_DELAY_NO_FIRE - aim_slowdown = SLOWDOWN_ADS_SPECIALIST - attachable_allowed = list( - /obj/item/attachable/magnetic_harness, - ) - - flags_gun_features = GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_INTERNAL_MAG - var/datum/effect_system/smoke_spread/smoke - - flags_item = TWOHANDED|NO_CRYO_STORE - var/skill_locked = TRUE - -/obj/item/weapon/gun/launcher/rocket/Initialize(mapload, spawn_empty) - . = ..() - smoke = new() - smoke.attach(src) - -/obj/item/weapon/gun/launcher/rocket/Destroy() - QDEL_NULL(smoke) - return ..() - - -/obj/item/weapon/gun/launcher/rocket/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) - - -/obj/item/weapon/gun/launcher/rocket/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_6*2) - accuracy_mult = BASE_ACCURACY_MULT - scatter = SCATTER_AMOUNT_TIER_6 - damage_mult = BASE_BULLET_DAMAGE_MULT - recoil = RECOIL_AMOUNT_TIER_3 - - -/obj/item/weapon/gun/launcher/rocket/get_examine_text(mob/user) - . = ..() - if(current_mag.current_rounds <= 0) - . += "It's not loaded." - return - if(current_mag.current_rounds > 0) - . += "It has an 84mm [ammo.name] loaded." - - -/obj/item/weapon/gun/launcher/rocket/able_to_fire(mob/living/user) - . = ..() - if (. && istype(user)) //Let's check all that other stuff first. - if(skill_locked && !skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_ROCKET) - to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) - return 0 - if(user.faction == FACTION_MARINE && explosive_antigrief_check(src, user)) - to_chat(user, SPAN_WARNING("\The [name]'s safe-area accident inhibitor prevents you from firing!")) - msg_admin_niche("[key_name(user)] attempted to fire \a [name] in [get_area(src)] [ADMIN_JMP(loc)]") - return FALSE - if(current_mag && current_mag.current_rounds > 0) - make_rocket(user, 0, 1) - -/obj/item/weapon/gun/launcher/rocket/load_into_chamber(mob/user) -// if(active_attachable) active_attachable = null - return ready_in_chamber() - -//No such thing -/obj/item/weapon/gun/launcher/rocket/reload_into_chamber(mob/user) - return TRUE - -/obj/item/weapon/gun/launcher/rocket/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) - if(!current_mag) - return - qdel(projectile_to_fire) - if(refund) - current_mag.current_rounds++ - return TRUE - -/obj/item/weapon/gun/launcher/rocket/proc/make_rocket(mob/user, drop_override = 0, empty = 1) - if(!current_mag) - return - - var/obj/item/ammo_magazine/rocket/r = new current_mag.type() - //if there's ever another type of custom rocket ammo this logic should just be moved into a function on the rocket - if(istype(current_mag, /obj/item/ammo_magazine/rocket/custom) && !empty) - //set the custom rocket variables here. - var/obj/item/ammo_magazine/rocket/custom/k = new /obj/item/ammo_magazine/rocket/custom - var/obj/item/ammo_magazine/rocket/custom/cur_mag_cast = current_mag - k.contents = cur_mag_cast.contents - k.desc = cur_mag_cast.desc - k.fuel = cur_mag_cast.fuel - k.icon_state = cur_mag_cast.icon_state - k.warhead = cur_mag_cast.warhead - k.locked = cur_mag_cast.locked - k.name = cur_mag_cast.name - k.filters = cur_mag_cast.filters - r = k - - if(empty) - r.current_rounds = 0 - if(drop_override || !user) //If we want to drop it on the ground or there's no user. - r.forceMove(get_turf(src)) //Drop it on the ground. - else - user.put_in_hands(r) - r.update_icon() - -/obj/item/weapon/gun/launcher/rocket/reload(mob/user, obj/item/ammo_magazine/rocket) - if(!current_mag) - return - if(flags_gun_features & GUN_BURST_FIRING) - return - - if(!rocket || !istype(rocket) || !istype(src, rocket.gun_type)) - to_chat(user, SPAN_WARNING("That's not going to fit!")) - return - - if(current_mag.current_rounds > 0) - to_chat(user, SPAN_WARNING("[src] is already loaded!")) - return - - if(rocket.current_rounds <= 0) - to_chat(user, SPAN_WARNING("That frame is empty!")) - return - - if(user) - to_chat(user, SPAN_NOTICE("You begin reloading [src]. Hold still...")) - if(do_after(user,current_mag.reload_delay, INTERRUPT_ALL, BUSY_ICON_FRIENDLY)) - qdel(current_mag) - user.drop_inv_item_on_ground(rocket) - current_mag = rocket - rocket.forceMove(src) - replace_ammo(,rocket) - to_chat(user, SPAN_NOTICE("You load [rocket] into [src].")) - if(reload_sound) - playsound(user, reload_sound, 25, 1) - else - playsound(user,'sound/machines/click.ogg', 25, 1) - else - to_chat(user, SPAN_WARNING("Your reload was interrupted!")) - return - else - qdel(current_mag) - current_mag = rocket - rocket.forceMove(src) - replace_ammo(,rocket) - return TRUE - -/obj/item/weapon/gun/launcher/rocket/unload(mob/user, reload_override = 0, drop_override = 0) - if(user && current_mag) - if(current_mag.current_rounds <= 0) - to_chat(user, SPAN_WARNING("[src] is already empty!")) - return - to_chat(user, SPAN_NOTICE("You begin unloading [src]. Hold still...")) - if(do_after(user,current_mag.reload_delay, INTERRUPT_ALL, BUSY_ICON_FRIENDLY)) - if(current_mag.current_rounds <= 0) - to_chat(user, SPAN_WARNING("You have already unloaded \the [src].")) - return - playsound(user, unload_sound, 25, 1) - user.visible_message(SPAN_NOTICE("[user] unloads [ammo] from [src]."), - SPAN_NOTICE("You unload [ammo] from [src].")) - make_rocket(user, drop_override, 0) - current_mag.current_rounds = 0 - -//Adding in the rocket backblast. The tile behind the specialist gets blasted hard enough to down and slightly wound anyone -/obj/item/weapon/gun/launcher/rocket/apply_bullet_effects(obj/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0) - . = ..() - if(!HAS_TRAIT(user, TRAIT_EAR_PROTECTION) && ishuman(user)) - var/mob/living/carbon/human/huser = user - to_chat(user, SPAN_WARNING("Augh!! \The [src]'s launch blast resonates extremely loudly in your ears! You probably should have worn some sort of ear protection...")) - huser.apply_effect(6, STUTTER) - huser.emote("pain") - huser.SetEarDeafness(max(user.ear_deaf,10)) - - var/backblast_loc = get_turf(get_step(user.loc, turn(user.dir, 180))) - smoke.set_up(1, 0, backblast_loc, turn(user.dir, 180)) - smoke.start() - playsound(src, 'sound/weapons/gun_rocketlauncher.ogg', 100, TRUE, 10) - for(var/mob/living/carbon/C in backblast_loc) - if(!C.lying && !HAS_TRAIT(C, TRAIT_EAR_PROTECTION)) //Have to be standing up to get the fun stuff - C.apply_damage(15, BRUTE) //The shockwave hurts, quite a bit. It can knock unarmored targets unconscious in real life - C.apply_effect(4, STUN) //For good measure - C.apply_effect(6, STUTTER) - C.emote("pain") - -//------------------------------------------------------- -//M5 RPG'S MEAN FUCKING COUSIN - -/obj/item/weapon/gun/launcher/rocket/m57a4 - name = "\improper M57-A4 'Lightning Bolt' quad thermobaric launcher" - desc = "The M57-A4 'Lightning Bolt' is possibly the most destructive man-portable weapon ever made. It is a 4-barreled missile launcher capable of burst-firing 4 thermobaric missiles. Enough said." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/event.dmi' - icon_state = "m57a4" - item_state = "m57a4" - - current_mag = /obj/item/ammo_magazine/rocket/m57a4 - aim_slowdown = SLOWDOWN_ADS_SUPERWEAPON - flags_gun_features = GUN_WIELDED_FIRING_ONLY - -/obj/item/weapon/gun/launcher/rocket/m57a4/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_5) - set_burst_delay(FIRE_DELAY_TIER_7) - set_burst_amount(BURST_AMOUNT_TIER_4) - accuracy_mult = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_4 - scatter = SCATTER_AMOUNT_TIER_6 - damage_mult = BASE_BULLET_DAMAGE_MULT - recoil = RECOIL_AMOUNT_TIER_3 - - -//------------------------------------------------------- -//AT rocket launchers, can be used by non specs - -/obj/item/weapon/gun/launcher/rocket/anti_tank //reloadable - name = "\improper QH-4 Shoulder-Mounted Anti-Tank RPG" - desc = "Used to take out light-tanks and enemy structures, the QH-4 is a dangerous weapon specialised against vehicles. Requires direct hits to penetrate vehicle armor." - icon_state = "m83a2" - item_state = "m83a2" - unacidable = FALSE - indestructible = FALSE - skill_locked = FALSE - - current_mag = /obj/item/ammo_magazine/rocket/anti_tank - - attachable_allowed = list() - - flags_gun_features = GUN_WIELDED_FIRING_ONLY - - flags_item = TWOHANDED - -/obj/item/weapon/gun/launcher/rocket/anti_tank/set_bullet_traits() - . = ..() - LAZYADD(traits_to_give, list( - BULLET_TRAIT_ENTRY_ID("vehicles", /datum/element/bullet_trait_damage_boost, 20, GLOB.damage_boost_vehicles), - )) - -/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable //single shot and disposable - name = "\improper M83A2 SADAR" - desc = "The M83A2 SADAR is a lightweight one-shot anti-armor weapon capable of engaging enemy vehicles at ranges up to 1,000m. Fully disposable, the rocket's launcher is discarded after firing. When stowed (unique-action), the SADAR system consists of a watertight carbon-fiber composite blast tube, inside of which is an aluminum launch tube containing the missile. The weapon is fired by pushing a charge button on the trigger grip. It is sighted and fired from the shoulder." - var/fired = FALSE - -/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/get_examine_text(mob/user) - . = ..() - . += SPAN_NOTICE("You can fold it up with unique-action.") - -/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/Fire(atom/target, mob/living/user, params, reflex, dual_wield) - . = ..() - if(.) - fired = TRUE - -/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/unique_action(mob/M) - if(fired) - to_chat(M, SPAN_WARNING("\The [src] has already been fired - you can't fold it back up again!")) - return - - M.visible_message(SPAN_NOTICE("[M] begins to fold up \the [src]."), SPAN_NOTICE("You start to fold and collapse closed \the [src].")) - - if(!do_after(M, 2 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) - to_chat(M, SPAN_NOTICE("You stop folding up \the [src]")) - return - - fold(M) - M.visible_message(SPAN_NOTICE("[M] finishes folding \the [src]."), SPAN_NOTICE("You finish folding \the [src].")) - -/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/proc/fold(mob/user) - var/obj/item/prop/folded_anti_tank_sadar/F = new /obj/item/prop/folded_anti_tank_sadar(src.loc) - transfer_label_component(F) - qdel(src) - user.put_in_active_hand(F) - -/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/reload() - to_chat(usr, SPAN_WARNING("You cannot reload \the [src]!")) - return - -/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/unload() - to_chat(usr, SPAN_WARNING("You cannot unload \the [src]!")) - return - -//folded version of the sadar -/obj/item/prop/folded_anti_tank_sadar - name = "\improper M83 SADAR (folded)" - desc = "An M83 SADAR Anti-Tank RPG, compacted for easier storage. Can be unfolded with the Z key." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "m83a2_folded" - w_class = SIZE_MEDIUM - garbage = FALSE - -/obj/item/prop/folded_anti_tank_sadar/attack_self(mob/user) - user.visible_message(SPAN_NOTICE("[user] begins to unfold \the [src]."), SPAN_NOTICE("You start to unfold and expand \the [src].")) - playsound(src, 'sound/items/component_pickup.ogg', 20, TRUE, 5) - - if(!do_after(user, 4 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) - to_chat(user, SPAN_NOTICE("You stop unfolding \the [src]")) - return - - unfold(user) - - user.visible_message(SPAN_NOTICE("[user] finishes unfolding \the [src]."), SPAN_NOTICE("You finish unfolding \the [src].")) - playsound(src, 'sound/items/component_pickup.ogg', 20, TRUE, 5) - . = ..() - -/obj/item/prop/folded_anti_tank_sadar/proc/unfold(mob/user) - var/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/F = new /obj/item/weapon/gun/launcher/rocket/anti_tank/disposable(src.loc) - transfer_label_component(F) - qdel(src) - user.put_in_active_hand(F) - -//------------------------------------------------------- -//UPP Rocket Launcher - -/obj/item/weapon/gun/launcher/rocket/upp - name = "\improper HJRA-12 Handheld Anti-Tank Grenade Launcher" - desc = "The HJRA-12 Handheld Anti-Tank Grenade Launcher is the standard Anti-Armor weapon of the UPP. It is designed to be easy to use and to take out or disable armored vehicles." - icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi' - icon_state = "hjra12" - item_state = "hjra12" - skill_locked = FALSE - current_mag = /obj/item/ammo_magazine/rocket/upp/at - - attachable_allowed = list(/obj/item/attachable/upp_rpg_breech) - - flags_gun_features = GUN_WIELDED_FIRING_ONLY - - flags_item = TWOHANDED - -/obj/item/weapon/gun/launcher/rocket/upp/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = -6, "stock_y" = 16, "special_x" = 37, "special_y" = 16) - -/obj/item/weapon/gun/launcher/rocket/upp/handle_starting_attachment() - ..() - var/obj/item/attachable/upp_rpg_breech/S = new(src) - S.flags_attach_features &= ~ATTACH_REMOVABLE - S.Attach(src) - update_attachables() - - var/obj/item/attachable/magnetic_harness/Integrated = new(src) - Integrated.hidden = TRUE - Integrated.flags_attach_features &= ~ATTACH_REMOVABLE - Integrated.Attach(src) - update_attachable(Integrated.slot) - -/obj/item/weapon/gun/launcher/rocket/upp/apply_bullet_effects(obj/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0) - . = ..() - if(!HAS_TRAIT(user, TRAIT_EAR_PROTECTION) && ishuman(user)) - return - - var/backblast_loc = get_turf(get_step(user.loc, turn(user.dir, 180))) - smoke.set_up(1, 0, backblast_loc, turn(user.dir, 180)) - smoke.start() - playsound(src, 'sound/weapons/gun_rocketlauncher.ogg', 100, TRUE, 10) - for(var/mob/living/carbon/C in backblast_loc) - if(!C.lying && !HAS_TRAIT(C, TRAIT_EAR_PROTECTION)) //Have to be standing up to get the fun stuff - C.apply_damage(15, BRUTE) //The shockwave hurts, quite a bit. It can knock unarmored targets unconscious in real life - C.apply_effect(4, STUN) //For good measure - C.apply_effect(6, STUTTER) - C.emote("pain") diff --git a/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm new file mode 100644 index 000000000000..0f767d679d03 --- /dev/null +++ b/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm @@ -0,0 +1,364 @@ +//------------------------------------------------------- +//GRENADE LAUNCHER + +/obj/item/weapon/gun/launcher/grenade //Parent item for GLs. + w_class = SIZE_LARGE + throw_speed = SPEED_SLOW + throw_range = 10 + force = 5 + + fire_sound = 'sound/weapons/armbomb.ogg' + cocked_sound = 'sound/weapons/gun_m92_cocked.ogg' + reload_sound = 'sound/weapons/gun_shotgun_open2.ogg' //Played when inserting nade. + unload_sound = 'sound/weapons/gun_revolver_unload.ogg' + + has_cylinder = TRUE //This weapon won't work otherwise. + preload = /obj/item/explosive/grenade/high_explosive + internal_slots = 1 //This weapon must use slots. + internal_max_w_class = SIZE_MEDIUM //MEDIUM = M15. + + aim_slowdown = SLOWDOWN_ADS_SPECIALIST + wield_delay = WIELD_DELAY_SLOW + flags_gun_features = GUN_UNUSUAL_DESIGN|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY + ///Can you access the storage by clicking it, put things into it, or take things out? Meant for break-actions mostly but useful for any state where you want access to be toggleable. Make sure to call cylinder.close(user) so they don't still have the screen open! + var/open_chamber = TRUE + ///Does it launch its grenades in a low arc or a high? Do they strike people in their path, or fly beyond? + var/is_lobbing = FALSE + ///Verboten munitions. This is a blacklist. Anything in this list isn't loadable. + var/disallowed_grenade_types = list(/obj/item/explosive/grenade/spawnergrenade, /obj/item/explosive/grenade/alien, /obj/item/explosive/grenade/incendiary/molotov, /obj/item/explosive/grenade/flashbang) + ///What is this weapon permitted to fire? This is a whitelist. Anything in this list can be fired. Anything. + var/valid_munitions = list(/obj/item/explosive/grenade) + + +/obj/item/weapon/gun/launcher/grenade/set_gun_config_values() + ..() + recoil = RECOIL_AMOUNT_TIER_4 //Same as m37 shotgun. + + +/obj/item/weapon/gun/launcher/grenade/on_pocket_insertion() //Plays load sfx whenever a nade is put into storage. + playsound(usr, reload_sound, 25, 1) + update_icon() + +/obj/item/weapon/gun/launcher/grenade/on_pocket_removal() + update_icon() + +/obj/item/weapon/gun/launcher/grenade/get_examine_text(mob/user) //Different treatment for single-shot VS multi-shot GLs. + . = ..() + if(get_dist(user, src) > 2 && user != loc) + return + if(length(cylinder.contents)) + if(internal_slots == 1) + . += SPAN_NOTICE("It is loaded with a grenade.") + else + . += SPAN_NOTICE("It is loaded with [length(cylinder.contents)] / [internal_slots] grenades.") + else + . += SPAN_NOTICE("It is empty.") + + +/obj/item/weapon/gun/launcher/grenade/update_icon() + ..() + var/GL_sprite = base_gun_icon + if(GL_has_empty_icon && cylinder && !length(cylinder.contents)) + GL_sprite += "_e" + playsound(loc, cocked_sound, 25, 1) + if(GL_has_open_icon && open_chamber) + GL_sprite += "_o" + playsound(loc, cocked_sound, 25, 1) + icon_state = GL_sprite + + +/obj/item/weapon/gun/launcher/grenade/attack_hand(mob/user) + if(!open_chamber || src != user.get_inactive_hand()) //Need to have the GL in your hands to open the cylinder. + return ..() + if(cylinder.handle_attack_hand(user)) + ..() + + +/obj/item/weapon/gun/launcher/grenade/unload(mob/user, reload_override = FALSE, drop_override = FALSE, loc_override = FALSE) + if(!open_chamber) + to_chat(user, SPAN_WARNING("[src] is closed!")) + return + if(!length(cylinder.contents)) + to_chat(user, SPAN_WARNING("It's empty!")) + return + + var/obj/item/explosive/grenade/nade = cylinder.contents[length(cylinder.contents)] //Grab the last-inserted one. Or the only one, as the case may be. + cylinder.remove_from_storage(nade, user.loc) + + if(drop_override || !user) + nade.forceMove(get_turf(src)) + else + user.put_in_hands(nade) + + user.visible_message(SPAN_NOTICE("[user] unloads [nade] from [src]."), + SPAN_NOTICE("You unload [nade] from [src]."), null, 4, CHAT_TYPE_COMBAT_ACTION) + playsound(user, unload_sound, 30, 1) + + +/obj/item/weapon/gun/launcher/grenade/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/attachable) && check_inactive_hand(user)) + attach_to_gun(user,I) + return + return cylinder.attackby(I, user) + +/obj/item/weapon/gun/launcher/grenade/unique_action(mob/user) + if(isobserver(usr) || isxeno(usr)) + return + if(locate(/datum/action/item_action/toggle_firing_level) in actions) + toggle_firing_level(usr) + +/obj/item/weapon/gun/launcher/grenade/proc/allowed_ammo_type(obj/item/I) + for(var/G in disallowed_grenade_types) //Check for the bad stuff. + if(istype(I, G)) + return FALSE + for(var/G in valid_munitions) //Check if it has a ticket. + if(istype(I, G)) + return TRUE + + +/obj/item/weapon/gun/launcher/grenade/on_pocket_attackby(obj/item/explosive/grenade/I, mob/user) //the attack in question is on the internal container. Complete override - normal storage attackby cannot be silenced, and will always say "you put the x into y". + if(!open_chamber) + to_chat(user, SPAN_WARNING("[src] is closed!")) + return + if(!istype(I)) + to_chat(user, SPAN_WARNING("You can't load [I] into [src]!")) + return + if(!allowed_ammo_type(I)) + to_chat(user, SPAN_WARNING("[src] can't fire this type of grenade!")) + return + if(length(cylinder.contents) >= internal_slots) + to_chat(user, SPAN_WARNING("[src] cannot hold more grenades!")) + return + if(!cylinder.can_be_inserted(I, user)) //Technically includes whether there's room for it, but the above gives a tailored message. + return + + user.visible_message(SPAN_NOTICE("[user] loads [I] into [src]."), + SPAN_NOTICE("You load [I] into the grenade launcher."), null, 4, CHAT_TYPE_COMBAT_ACTION) + playsound(usr, reload_sound, 75, 1) + if(internal_slots > 1) + to_chat(user, SPAN_INFO("Now storing: [length(cylinder.contents) + 1] / [internal_slots] grenades.")) + + cylinder.handle_item_insertion(I, TRUE, user) + + +/obj/item/weapon/gun/launcher/grenade/able_to_fire(mob/living/user) //Skillchecks and fire blockers go in the child items. + . = ..() + if(.) + if(!length(cylinder.contents)) + to_chat(user, SPAN_WARNING("The [name] is empty.")) + return FALSE + var/obj/item/explosive/grenade/G = cylinder.contents[1] + if(G.antigrief_protection && user.faction == FACTION_MARINE && explosive_antigrief_check(G, user)) + to_chat(user, SPAN_WARNING("\The [name]'s safe-area accident inhibitor prevents you from firing!")) + msg_admin_niche("[key_name(user)] attempted to prime \a [G.name] in [get_area(src)] [ADMIN_JMP(src.loc)]") + return FALSE + + +/obj/item/weapon/gun/launcher/grenade/afterattack(atom/target, mob/user, flag) //Not actually after the attack. After click, more like. + if(able_to_fire(user)) + if(get_dist(target,user) <= 2) + var/obj/item/explosive/grenade/nade = cylinder.contents[1] + if(nade.dangerous) + to_chat(user, SPAN_WARNING("The grenade launcher beeps a warning noise. You are too close!")) + return + fire_grenade(target,user) + + +/obj/item/weapon/gun/launcher/grenade/proc/fire_grenade(atom/target, mob/user) + set waitfor = 0 + last_fired = world.time + + var/to_firer = "You fire the [name]!" + if(internal_slots > 1) + to_firer += " [length(cylinder.contents)-1]/[internal_slots] grenades remaining." + user.visible_message(SPAN_DANGER("[user] fired a grenade!"), + SPAN_WARNING("[to_firer]"), message_flags = CHAT_TYPE_WEAPON_USE) + playsound(user.loc, fire_sound, 50, 1) + + var/angle = round(Get_Angle(user,target)) + muzzle_flash(angle,user) + simulate_recoil(0, user) + + var/obj/item/explosive/grenade/fired = cylinder.contents[1] + cylinder.remove_from_storage(fired, user.loc) + var/pass_flags = NO_FLAGS + if(is_lobbing) + if(istype(fired, /obj/item/explosive/grenade/slug/baton)) + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + human_user.remember_dropped_object(fired) + fired.fingerprintslast = key_name(user) + pass_flags |= PASS_MOB_THRU_HUMAN|PASS_MOB_IS_OTHER|PASS_OVER + else + pass_flags |= PASS_MOB_THRU|PASS_HIGH_OVER + + msg_admin_attack("[key_name_admin(user)] fired a grenade ([fired.name]) from \a ([name]).") + log_game("[key_name_admin(user)] used a grenade ([name]).") + + fired.throw_range = 20 + fired.det_time = min(10, fired.det_time) + fired.activate(user, FALSE) + fired.forceMove(get_turf(src)) + fired.throw_atom(target, 20, SPEED_VERY_FAST, user, null, NORMAL_LAUNCH, pass_flags) + + + +//Doesn't use these. Listed for reference. +/obj/item/weapon/gun/launcher/grenade/load_into_chamber() + return +/obj/item/weapon/gun/launcher/grenade/reload_into_chamber() + return + +/obj/item/weapon/gun/launcher/grenade/has_ammunition() + return length(cylinder.contents) + +//------------------------------------------------------- +//Toggle firing level special action for grenade launchers + +/datum/action/item_action/toggle_firing_level/New(Target, obj/item/holder) + . = ..() + name = "Toggle Firing Level" + button.name = name + update_icon() + +/datum/action/item_action/toggle_firing_level/action_activate() + var/obj/item/weapon/gun/launcher/grenade/G = holder_item + if(!ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + if(H.is_mob_incapacitated() || G.get_active_firearm(H, FALSE) != holder_item) + return + G.toggle_firing_level(usr) + +/datum/action/item_action/toggle_firing_level/proc/update_icon() + var/obj/item/weapon/gun/launcher/grenade/G = holder_item + if(G.is_lobbing) + action_icon_state = "hightoss_on" + else + action_icon_state = "hightoss_off" + button.overlays.Cut() + button.overlays += image('icons/mob/hud/actions.dmi', button, action_icon_state) + +/obj/item/weapon/gun/launcher/grenade/proc/toggle_firing_level(mob/user) + is_lobbing = !is_lobbing + to_chat(user, "[icon2html(src, usr)] You changed \the [src]'s firing level. You will now fire [is_lobbing ? "in an arcing path over obstacles" : "directly at your target"].") + playsound(loc,'sound/machines/click.ogg', 25, 1) + var/datum/action/item_action/toggle_firing_level/TFL = locate(/datum/action/item_action/toggle_firing_level) in actions + TFL.update_icon() + +//------------------------------------------------------- +//M92 GRENADE LAUNCHER + +/obj/item/weapon/gun/launcher/grenade/m92 + name = "\improper M92 grenade launcher" + desc = "A heavy, 6-shot grenade launcher used by the Colonial Marines for area denial and big explosions." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' + icon_state = "m92" + item_state = "m92" + unacidable = TRUE + indestructible = 1 + matter = list("metal" = 6000) + actions_types = list(/datum/action/item_action/toggle_firing_level) + + attachable_allowed = list(/obj/item/attachable/magnetic_harness) + flags_item = TWOHANDED|NO_CRYO_STORE + map_specific_decoration = TRUE + + is_lobbing = TRUE + internal_slots = 6 + direct_draw = FALSE + +/obj/item/weapon/gun/launcher/grenade/m92/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 14, "rail_y" = 22, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) + +/obj/item/weapon/gun/launcher/grenade/m92/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_4*4) + +/obj/item/weapon/gun/launcher/grenade/m92/able_to_fire(mob/living/user) + . = ..() + if (. && istype(user)) + if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_GRENADIER) + to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) + return FALSE + + +//------------------------------------------------------- +//M81 GRENADE LAUNCHER + +/obj/item/weapon/gun/launcher/grenade/m81 + name = "\improper M81 grenade launcher" + desc = "A lightweight, single-shot low-angle grenade launcher used by the Colonial Marines for area denial and big explosions." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi' + icon_state = "m81" + item_state = "m81" //needs a wield sprite. + + matter = list("metal" = 7000) + +/obj/item/weapon/gun/launcher/grenade/m81/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 14, "rail_y" = 22, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) + +/obj/item/weapon/gun/launcher/grenade/m81/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_4 * 1.5) + +/obj/item/weapon/gun/launcher/grenade/m81/on_pocket_removal() + ..() + playsound(usr, unload_sound, 30, 1) + +/obj/item/weapon/gun/launcher/grenade/m81/riot/able_to_fire(mob/living/user) + . = ..() + if (. && istype(user)) + if(!skillcheck(user, SKILL_POLICE, SKILL_POLICE_SKILLED)) + to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) + return FALSE + + +/obj/item/weapon/gun/launcher/grenade/m81/riot + name = "\improper M81 riot grenade launcher" + desc = "A lightweight, single-shot low-angle grenade launcher to launch tear gas grenades. Used by the Colonial Marines Military Police during riots." + valid_munitions = list(/obj/item/explosive/grenade/custom/teargas) + preload = /obj/item/explosive/grenade/custom/teargas + +//------------------------------------------------------- +//M79 Grenade Launcher subtype of the M81 + +/obj/item/weapon/gun/launcher/grenade/m81/m79//m79 variant for marines + name = "\improper M79 grenade launcher" + desc = "A heavy, low-angle 40mm grenade launcher. It's been in use since the Vietnam War, though this version has been modernized with an IFF enabled micro-computer. The wooden furniture is, in fact, made of painted hardened polykevlon." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' + icon_state = "m79" + item_state = "m79" + flags_equip_slot = SLOT_BACK + preload = /obj/item/explosive/grenade/slug/baton + is_lobbing = TRUE + actions_types = list(/datum/action/item_action/toggle_firing_level) + + fire_sound = 'sound/weapons/handling/m79_shoot.ogg' + cocked_sound = 'sound/weapons/handling/m79_break_open.ogg' + reload_sound = 'sound/weapons/handling/m79_reload.ogg' + unload_sound = 'sound/weapons/handling/m79_unload.ogg' + + attachable_allowed = list( + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/flashlight, + /obj/item/attachable/reddot, + /obj/item/attachable/reflex, + /obj/item/attachable/stock/m79, + ) + +/obj/item/weapon/gun/launcher/grenade/m81/m79/handle_starting_attachment() + ..() + var/obj/item/attachable/stock/m79/S = new(src) + S.hidden = FALSE + S.flags_attach_features &= ~ATTACH_REMOVABLE + S.Attach(src) + update_attachable(S.slot) + +/obj/item/weapon/gun/launcher/grenade/m81/m79/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 9, "rail_y" = 22, "under_x" = 19, "under_y" = 14, "stock_x" = 14, "stock_y" = 14) + +/obj/item/weapon/gun/launcher/grenade/m81/m79/set_bullet_traits() + LAZYADD(traits_to_give, list( + BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff)//might not need this because of is_lobbing, but let's keep it just incase + )) diff --git a/code/modules/projectiles/guns/specialist/launcher/launcher.dm b/code/modules/projectiles/guns/specialist/launcher/launcher.dm new file mode 100644 index 000000000000..70f00aa83c35 --- /dev/null +++ b/code/modules/projectiles/guns/specialist/launcher/launcher.dm @@ -0,0 +1,46 @@ +//------------------------------------------------------- +//HEAVY WEAPONS + +/obj/item/weapon/gun/launcher + gun_category = GUN_CATEGORY_HEAVY + has_empty_icon = FALSE + has_open_icon = FALSE + ///gun update_icon doesn't detect that guns with no magazine are loaded or not, and will always append _o or _e if possible. + var/GL_has_empty_icon = TRUE + ///gun update_icon doesn't detect that guns with no magazine are loaded or not, and will always append _o or _e if possible. + var/GL_has_open_icon = FALSE + + ///Internal storage item used as magazine. Must be initialised to work! Set parameters by variables or it will inherit standard numbers from storage.dm. Got to call it *something* and 'magazine' or w/e would be confusing. + var/obj/item/storage/internal/cylinder + /// Variable that initializes the above. + var/has_cylinder = FALSE + ///What single item to fill the storage with, if any. This does not respect w_class. + var/preload + ///How many items can be inserted. "Null" = backpack-style size-based inventory. You'll have to set max_storage_space too if you do that, and arrange any initial contents. Iff you arrange to put in more items than the storage can hold, they can be taken out but not replaced. + var/internal_slots + ///how big an item can be inserted. + var/internal_max_w_class + ///the sfx played when the storage is opened. + var/use_sound = null + ///Whether clicking a held weapon with an empty hand will open its inventory or draw a munition out. + var/direct_draw = TRUE + +/obj/item/weapon/gun/launcher/Initialize(mapload, spawn_empty) //If changing vars on init, be sure to do the parent proccall *after* the change. + . = ..() + if(has_cylinder) + cylinder = new /obj/item/storage/internal(src) + cylinder.storage_slots = internal_slots + cylinder.max_w_class = internal_max_w_class + cylinder.use_sound = use_sound + if(direct_draw) + cylinder.storage_flags ^= STORAGE_USING_DRAWING_METHOD + if(preload && !spawn_empty) for(var/i = 1 to cylinder.storage_slots) + new preload(cylinder) + update_icon() + +/obj/item/weapon/gun/launcher/verb/toggle_draw_mode() + set name = "Switch Storage Drawing Method" + set category = "Object" + set src in usr + + cylinder.storage_draw_logic(src.name) diff --git a/code/modules/projectiles/guns/specialist/launcher/rocket_launcher.dm b/code/modules/projectiles/guns/specialist/launcher/rocket_launcher.dm new file mode 100644 index 000000000000..6d998002134c --- /dev/null +++ b/code/modules/projectiles/guns/specialist/launcher/rocket_launcher.dm @@ -0,0 +1,369 @@ + +//------------------------------------------------------- +//M5 RPG + +/obj/item/weapon/gun/launcher/rocket + name = "\improper M5 RPG" + desc = "The M5 RPG is the primary anti-armor weapon of the USCM. Used to take out light-tanks and enemy structures, the M5 RPG is a dangerous weapon with a variety of combat uses." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' + icon_state = "m5" + item_state = "m5" + unacidable = TRUE + indestructible = 1 + + matter = list("metal" = 10000) + current_mag = /obj/item/ammo_magazine/rocket + flags_equip_slot = NO_FLAGS + w_class = SIZE_HUGE + force = 15 + wield_delay = WIELD_DELAY_HORRIBLE + delay_style = WEAPON_DELAY_NO_FIRE + aim_slowdown = SLOWDOWN_ADS_SPECIALIST + attachable_allowed = list( + /obj/item/attachable/magnetic_harness, + ) + + flags_gun_features = GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_INTERNAL_MAG + var/datum/effect_system/smoke_spread/smoke + + flags_item = TWOHANDED|NO_CRYO_STORE + var/skill_locked = TRUE + +/obj/item/weapon/gun/launcher/rocket/Initialize(mapload, spawn_empty) + . = ..() + smoke = new() + smoke.attach(src) + +/obj/item/weapon/gun/launcher/rocket/Destroy() + QDEL_NULL(smoke) + return ..() + + +/obj/item/weapon/gun/launcher/rocket/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) + + +/obj/item/weapon/gun/launcher/rocket/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_6*2) + accuracy_mult = BASE_ACCURACY_MULT + scatter = SCATTER_AMOUNT_TIER_6 + damage_mult = BASE_BULLET_DAMAGE_MULT + recoil = RECOIL_AMOUNT_TIER_3 + + +/obj/item/weapon/gun/launcher/rocket/get_examine_text(mob/user) + . = ..() + if(current_mag.current_rounds <= 0) + . += "It's not loaded." + return + if(current_mag.current_rounds > 0) + . += "It has an 84mm [ammo.name] loaded." + + +/obj/item/weapon/gun/launcher/rocket/able_to_fire(mob/living/user) + . = ..() + if (. && istype(user)) //Let's check all that other stuff first. + if(skill_locked && !skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_ROCKET) + to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) + return 0 + if(user.faction == FACTION_MARINE && explosive_antigrief_check(src, user)) + to_chat(user, SPAN_WARNING("\The [name]'s safe-area accident inhibitor prevents you from firing!")) + msg_admin_niche("[key_name(user)] attempted to fire \a [name] in [get_area(src)] [ADMIN_JMP(loc)]") + return FALSE + if(current_mag && current_mag.current_rounds > 0) + make_rocket(user, 0, 1) + +/obj/item/weapon/gun/launcher/rocket/load_into_chamber(mob/user) +// if(active_attachable) active_attachable = null + return ready_in_chamber() + +//No such thing +/obj/item/weapon/gun/launcher/rocket/reload_into_chamber(mob/user) + return TRUE + +/obj/item/weapon/gun/launcher/rocket/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) + if(!current_mag) + return + qdel(projectile_to_fire) + if(refund) + current_mag.current_rounds++ + return TRUE + +/obj/item/weapon/gun/launcher/rocket/proc/make_rocket(mob/user, drop_override = 0, empty = 1) + if(!current_mag) + return + + var/obj/item/ammo_magazine/rocket/r = new current_mag.type() + //if there's ever another type of custom rocket ammo this logic should just be moved into a function on the rocket + if(istype(current_mag, /obj/item/ammo_magazine/rocket/custom) && !empty) + //set the custom rocket variables here. + var/obj/item/ammo_magazine/rocket/custom/k = new /obj/item/ammo_magazine/rocket/custom + var/obj/item/ammo_magazine/rocket/custom/cur_mag_cast = current_mag + k.contents = cur_mag_cast.contents + k.desc = cur_mag_cast.desc + k.fuel = cur_mag_cast.fuel + k.icon_state = cur_mag_cast.icon_state + k.warhead = cur_mag_cast.warhead + k.locked = cur_mag_cast.locked + k.name = cur_mag_cast.name + k.filters = cur_mag_cast.filters + r = k + + if(empty) + r.current_rounds = 0 + if(drop_override || !user) //If we want to drop it on the ground or there's no user. + r.forceMove(get_turf(src)) //Drop it on the ground. + else + user.put_in_hands(r) + r.update_icon() + +/obj/item/weapon/gun/launcher/rocket/reload(mob/user, obj/item/ammo_magazine/rocket) + if(!current_mag) + return + if(flags_gun_features & GUN_BURST_FIRING) + return + + if(!rocket || !istype(rocket) || !istype(src, rocket.gun_type)) + to_chat(user, SPAN_WARNING("That's not going to fit!")) + return + + if(current_mag.current_rounds > 0) + to_chat(user, SPAN_WARNING("[src] is already loaded!")) + return + + if(rocket.current_rounds <= 0) + to_chat(user, SPAN_WARNING("That frame is empty!")) + return + + if(user) + to_chat(user, SPAN_NOTICE("You begin reloading [src]. Hold still...")) + if(do_after(user,current_mag.reload_delay, INTERRUPT_ALL, BUSY_ICON_FRIENDLY)) + qdel(current_mag) + user.drop_inv_item_on_ground(rocket) + current_mag = rocket + rocket.forceMove(src) + replace_ammo(,rocket) + to_chat(user, SPAN_NOTICE("You load [rocket] into [src].")) + if(reload_sound) + playsound(user, reload_sound, 25, 1) + else + playsound(user,'sound/machines/click.ogg', 25, 1) + else + to_chat(user, SPAN_WARNING("Your reload was interrupted!")) + return + else + qdel(current_mag) + current_mag = rocket + rocket.forceMove(src) + replace_ammo(,rocket) + return TRUE + +/obj/item/weapon/gun/launcher/rocket/unload(mob/user, reload_override = 0, drop_override = 0) + if(user && current_mag) + if(current_mag.current_rounds <= 0) + to_chat(user, SPAN_WARNING("[src] is already empty!")) + return + to_chat(user, SPAN_NOTICE("You begin unloading [src]. Hold still...")) + if(do_after(user,current_mag.reload_delay, INTERRUPT_ALL, BUSY_ICON_FRIENDLY)) + if(current_mag.current_rounds <= 0) + to_chat(user, SPAN_WARNING("You have already unloaded \the [src].")) + return + playsound(user, unload_sound, 25, 1) + user.visible_message(SPAN_NOTICE("[user] unloads [ammo] from [src]."), + SPAN_NOTICE("You unload [ammo] from [src].")) + make_rocket(user, drop_override, 0) + current_mag.current_rounds = 0 + +//Adding in the rocket backblast. The tile behind the specialist gets blasted hard enough to down and slightly wound anyone +/obj/item/weapon/gun/launcher/rocket/apply_bullet_effects(obj/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0) + . = ..() + if(!HAS_TRAIT(user, TRAIT_EAR_PROTECTION) && ishuman(user)) + var/mob/living/carbon/human/huser = user + to_chat(user, SPAN_WARNING("Augh!! \The [src]'s launch blast resonates extremely loudly in your ears! You probably should have worn some sort of ear protection...")) + huser.apply_effect(6, STUTTER) + huser.emote("pain") + huser.SetEarDeafness(max(user.ear_deaf,10)) + + var/backblast_loc = get_turf(get_step(user.loc, turn(user.dir, 180))) + smoke.set_up(1, 0, backblast_loc, turn(user.dir, 180)) + smoke.start() + playsound(src, 'sound/weapons/gun_rocketlauncher.ogg', 100, TRUE, 10) + for(var/mob/living/carbon/C in backblast_loc) + if(!C.lying && !HAS_TRAIT(C, TRAIT_EAR_PROTECTION)) //Have to be standing up to get the fun stuff + C.apply_damage(15, BRUTE) //The shockwave hurts, quite a bit. It can knock unarmored targets unconscious in real life + C.apply_effect(4, STUN) //For good measure + C.apply_effect(6, STUTTER) + C.emote("pain") + +//------------------------------------------------------- +//M5 RPG'S MEAN FUCKING COUSIN + +/obj/item/weapon/gun/launcher/rocket/m57a4 + name = "\improper M57-A4 'Lightning Bolt' quad thermobaric launcher" + desc = "The M57-A4 'Lightning Bolt' is possibly the most destructive man-portable weapon ever made. It is a 4-barreled missile launcher capable of burst-firing 4 thermobaric missiles. Enough said." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/event.dmi' + icon_state = "m57a4" + item_state = "m57a4" + + current_mag = /obj/item/ammo_magazine/rocket/m57a4 + aim_slowdown = SLOWDOWN_ADS_SUPERWEAPON + flags_gun_features = GUN_WIELDED_FIRING_ONLY + +/obj/item/weapon/gun/launcher/rocket/m57a4/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_5) + set_burst_delay(FIRE_DELAY_TIER_7) + set_burst_amount(BURST_AMOUNT_TIER_4) + accuracy_mult = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_4 + scatter = SCATTER_AMOUNT_TIER_6 + damage_mult = BASE_BULLET_DAMAGE_MULT + recoil = RECOIL_AMOUNT_TIER_3 + + +//------------------------------------------------------- +//AT rocket launchers, can be used by non specs + +/obj/item/weapon/gun/launcher/rocket/anti_tank //reloadable + name = "\improper QH-4 Shoulder-Mounted Anti-Tank RPG" + desc = "Used to take out light-tanks and enemy structures, the QH-4 is a dangerous weapon specialised against vehicles. Requires direct hits to penetrate vehicle armor." + icon_state = "m83a2" + item_state = "m83a2" + unacidable = FALSE + indestructible = FALSE + skill_locked = FALSE + + current_mag = /obj/item/ammo_magazine/rocket/anti_tank + + attachable_allowed = list() + + flags_gun_features = GUN_WIELDED_FIRING_ONLY + + flags_item = TWOHANDED + +/obj/item/weapon/gun/launcher/rocket/anti_tank/set_bullet_traits() + . = ..() + LAZYADD(traits_to_give, list( + BULLET_TRAIT_ENTRY_ID("vehicles", /datum/element/bullet_trait_damage_boost, 20, GLOB.damage_boost_vehicles), + )) + +/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable //single shot and disposable + name = "\improper M83A2 SADAR" + desc = "The M83A2 SADAR is a lightweight one-shot anti-armor weapon capable of engaging enemy vehicles at ranges up to 1,000m. Fully disposable, the rocket's launcher is discarded after firing. When stowed (unique-action), the SADAR system consists of a watertight carbon-fiber composite blast tube, inside of which is an aluminum launch tube containing the missile. The weapon is fired by pushing a charge button on the trigger grip. It is sighted and fired from the shoulder." + var/fired = FALSE + +/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/get_examine_text(mob/user) + . = ..() + . += SPAN_NOTICE("You can fold it up with unique-action.") + +/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/Fire(atom/target, mob/living/user, params, reflex, dual_wield) + . = ..() + if(.) + fired = TRUE + +/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/unique_action(mob/M) + if(fired) + to_chat(M, SPAN_WARNING("\The [src] has already been fired - you can't fold it back up again!")) + return + + M.visible_message(SPAN_NOTICE("[M] begins to fold up \the [src]."), SPAN_NOTICE("You start to fold and collapse closed \the [src].")) + + if(!do_after(M, 2 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + to_chat(M, SPAN_NOTICE("You stop folding up \the [src]")) + return + + fold(M) + M.visible_message(SPAN_NOTICE("[M] finishes folding \the [src]."), SPAN_NOTICE("You finish folding \the [src].")) + +/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/proc/fold(mob/user) + var/obj/item/prop/folded_anti_tank_sadar/F = new /obj/item/prop/folded_anti_tank_sadar(src.loc) + transfer_label_component(F) + qdel(src) + user.put_in_active_hand(F) + +/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/reload() + to_chat(usr, SPAN_WARNING("You cannot reload \the [src]!")) + return + +/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/unload() + to_chat(usr, SPAN_WARNING("You cannot unload \the [src]!")) + return + +//folded version of the sadar +/obj/item/prop/folded_anti_tank_sadar + name = "\improper M83 SADAR (folded)" + desc = "An M83 SADAR Anti-Tank RPG, compacted for easier storage. Can be unfolded with the Z key." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' + icon_state = "m83a2_folded" + w_class = SIZE_MEDIUM + garbage = FALSE + +/obj/item/prop/folded_anti_tank_sadar/attack_self(mob/user) + user.visible_message(SPAN_NOTICE("[user] begins to unfold \the [src]."), SPAN_NOTICE("You start to unfold and expand \the [src].")) + playsound(src, 'sound/items/component_pickup.ogg', 20, TRUE, 5) + + if(!do_after(user, 4 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + to_chat(user, SPAN_NOTICE("You stop unfolding \the [src]")) + return + + unfold(user) + + user.visible_message(SPAN_NOTICE("[user] finishes unfolding \the [src]."), SPAN_NOTICE("You finish unfolding \the [src].")) + playsound(src, 'sound/items/component_pickup.ogg', 20, TRUE, 5) + . = ..() + +/obj/item/prop/folded_anti_tank_sadar/proc/unfold(mob/user) + var/obj/item/weapon/gun/launcher/rocket/anti_tank/disposable/F = new /obj/item/weapon/gun/launcher/rocket/anti_tank/disposable(src.loc) + transfer_label_component(F) + qdel(src) + user.put_in_active_hand(F) + +//------------------------------------------------------- +//UPP Rocket Launcher + +/obj/item/weapon/gun/launcher/rocket/upp + name = "\improper HJRA-12 Handheld Anti-Tank Grenade Launcher" + desc = "The HJRA-12 Handheld Anti-Tank Grenade Launcher is the standard Anti-Armor weapon of the UPP. It is designed to be easy to use and to take out or disable armored vehicles." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi' + icon_state = "hjra12" + item_state = "hjra12" + skill_locked = FALSE + current_mag = /obj/item/ammo_magazine/rocket/upp/at + + attachable_allowed = list(/obj/item/attachable/upp_rpg_breech) + + flags_gun_features = GUN_WIELDED_FIRING_ONLY + + flags_item = TWOHANDED + +/obj/item/weapon/gun/launcher/rocket/upp/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = -6, "stock_y" = 16, "special_x" = 37, "special_y" = 16) + +/obj/item/weapon/gun/launcher/rocket/upp/handle_starting_attachment() + ..() + var/obj/item/attachable/upp_rpg_breech/S = new(src) + S.flags_attach_features &= ~ATTACH_REMOVABLE + S.Attach(src) + update_attachables() + + var/obj/item/attachable/magnetic_harness/Integrated = new(src) + Integrated.hidden = TRUE + Integrated.flags_attach_features &= ~ATTACH_REMOVABLE + Integrated.Attach(src) + update_attachable(Integrated.slot) + +/obj/item/weapon/gun/launcher/rocket/upp/apply_bullet_effects(obj/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0) + . = ..() + if(!HAS_TRAIT(user, TRAIT_EAR_PROTECTION) && ishuman(user)) + return + + var/backblast_loc = get_turf(get_step(user.loc, turn(user.dir, 180))) + smoke.set_up(1, 0, backblast_loc, turn(user.dir, 180)) + smoke.start() + playsound(src, 'sound/weapons/gun_rocketlauncher.ogg', 100, TRUE, 10) + for(var/mob/living/carbon/C in backblast_loc) + if(!C.lying && !HAS_TRAIT(C, TRAIT_EAR_PROTECTION)) //Have to be standing up to get the fun stuff + C.apply_damage(15, BRUTE) //The shockwave hurts, quite a bit. It can knock unarmored targets unconscious in real life + C.apply_effect(4, STUN) //For good measure + C.apply_effect(6, STUTTER) + C.emote("pain") diff --git a/code/modules/projectiles/guns/specialist/scout.dm b/code/modules/projectiles/guns/specialist/scout.dm new file mode 100644 index 000000000000..c2c5abd54add --- /dev/null +++ b/code/modules/projectiles/guns/specialist/scout.dm @@ -0,0 +1,83 @@ +//M4RA custom marksman rifle + +/obj/item/weapon/gun/rifle/m4ra_custom + name = "\improper M4RA custom battle rifle" + desc = "This is a further improvement upon the already rock-solid M4RA. Made by the USCM armorers on Chinook station - This variant of the M4RA has a specifically milled magazine well to accept A19 rounds. It sports a light-weight titantium-alloy frame, better responsive to the heavy kick of the tailor-made A19 rounds." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' + icon_state = "m4ra_custom" + item_state = "m4ra_custom" + unacidable = TRUE + indestructible = 1 + accepted_ammo = list( + /obj/item/ammo_magazine/rifle/m4ra, + /obj/item/ammo_magazine/rifle/m4ra/ap, + /obj/item/ammo_magazine/rifle/m4ra/ext, + /obj/item/ammo_magazine/rifle/m4ra/rubber, + /obj/item/ammo_magazine/rifle/m4ra/incendiary, + /obj/item/ammo_magazine/rifle/m4ra/heap, + /obj/item/ammo_magazine/rifle/m4ra/penetrating, + /obj/item/ammo_magazine/rifle/m4ra/custom, + /obj/item/ammo_magazine/rifle/m4ra/custom/incendiary, + /obj/item/ammo_magazine/rifle/m4ra/custom/impact, + + ) + + fire_sound = 'sound/weapons/gun_m4ra.ogg' + reload_sound = 'sound/weapons/handling/l42_reload.ogg' + unload_sound = 'sound/weapons/handling/l42_unload.ogg' + current_mag = /obj/item/ammo_magazine/rifle/m4ra/custom + force = 26 + attachable_allowed = list( + /obj/item/attachable/suppressor, + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonet/upp, + /obj/item/attachable/bayonet/co2, + /obj/item/attachable/reddot, + /obj/item/attachable/reflex, + /obj/item/attachable/flashlight, + /obj/item/attachable/extended_barrel, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/bipod, + /obj/item/attachable/attached_gun/shotgun, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/angledgrip, + /obj/item/attachable/lasersight, + /obj/item/attachable/scope, + /obj/item/attachable/scope/mini, + /obj/item/attachable/flashlight/grip, + ) + + flags_gun_features = GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER + map_specific_decoration = TRUE + aim_slowdown = SLOWDOWN_ADS_QUICK + flags_item = TWOHANDED|NO_CRYO_STORE + +/obj/item/weapon/gun/rifle/m4ra_custom/handle_starting_attachment() + ..() + var/obj/item/attachable/m4ra_barrel_custom/integrated = new(src) + integrated.flags_attach_features &= ~ATTACH_REMOVABLE + integrated.Attach(src) + update_attachable(integrated.slot) + + +/obj/item/weapon/gun/rifle/m4ra_custom/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 43, "muzzle_y" = 17,"rail_x" = 23, "rail_y" = 21, "under_x" = 30, "under_y" = 11, "stock_x" = 24, "stock_y" = 13, "special_x" = 37, "special_y" = 16) + +/obj/item/weapon/gun/rifle/m4ra_custom/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_6) + set_burst_amount(BURST_AMOUNT_TIER_2) + set_burst_delay(FIRE_DELAY_TIER_12) + accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_2 + scatter = SCATTER_AMOUNT_TIER_8 + burst_scatter_mult = SCATTER_AMOUNT_TIER_8 + damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_2 + recoil = RECOIL_AMOUNT_TIER_5 + damage_falloff_mult = 0 + +/obj/item/weapon/gun/rifle/m4ra_custom/able_to_fire(mob/living/user) + . = ..() + if (. && istype(user)) //Let's check all that other stuff first. + if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_SCOUT) + to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) + return FALSE diff --git a/code/modules/projectiles/guns/specialist/sniper.dm b/code/modules/projectiles/guns/specialist/sniper.dm new file mode 100644 index 000000000000..17a2c0f26887 --- /dev/null +++ b/code/modules/projectiles/guns/specialist/sniper.dm @@ -0,0 +1,510 @@ +//------------------------------------------------------- +//SNIPER RIFLES +//Keyword rifles. They are subtype of rifles, but still contained here as a specialist weapon. + +//Because this parent type did not exist +//Note that this means that snipers will have a slowdown of 3, due to the scope +/obj/item/weapon/gun/rifle/sniper + aim_slowdown = SLOWDOWN_ADS_SPECIALIST + wield_delay = WIELD_DELAY_SLOW + + var/has_aimed_shot = TRUE + var/aiming_time = 1.25 SECONDS + var/aimed_shot_cooldown + var/aimed_shot_cooldown_delay = 2.5 SECONDS + + var/enable_aimed_shot_laser = TRUE + var/sniper_lockon_icon = "sniper_lockon" + var/obj/effect/ebeam/sniper_beam_type = /obj/effect/ebeam/laser + var/sniper_beam_icon = "laser_beam" + var/skill_locked = TRUE + +/obj/item/weapon/gun/rifle/sniper/get_examine_text(mob/user) + . = ..() + if(!has_aimed_shot) + return + . += SPAN_NOTICE("This weapon has an unique ability, Aimed Shot, allowing it to deal great damage after a windup.
Additionally, the aimed shot can be sped up with a tracking laser, which is enabled by default but may be disabled.") + +/obj/item/weapon/gun/rifle/sniper/Initialize(mapload, spawn_empty) + if(has_aimed_shot) + LAZYADD(actions_types, list(/datum/action/item_action/specialist/aimed_shot, /datum/action/item_action/specialist/toggle_laser)) + return ..() + +/obj/item/weapon/gun/rifle/sniper/able_to_fire(mob/living/user) + . = ..() + if(. && istype(user) && skill_locked) //Let's check all that other stuff first. + if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_SNIPER) + to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) + return 0 + +// Aimed shot ability +/datum/action/item_action/specialist/aimed_shot + ability_primacy = SPEC_PRIMARY_ACTION_2 + var/minimum_aim_distance = 2 + +/datum/action/item_action/specialist/aimed_shot/New(mob/living/user, obj/item/holder) + ..() + name = "Aimed Shot" + button.name = name + button.overlays.Cut() + var/image/IMG = image('icons/mob/hud/actions.dmi', button, "sniper_aim") + button.overlays += IMG + var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item + sniper_rifle.aimed_shot_cooldown = world.time + +/* + ACTIONS SPECIALSIT SNIPER CAN TAKE +*/ +/datum/action/item_action/specialist/aimed_shot/action_activate() + if(!ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + if(H.selected_ability == src) + to_chat(H, "You will no longer use [name] with \ + [H.client && H.client.prefs && H.client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_CLICK ? "middle-click" : "shift-click"].") + button.icon_state = "template" + H.selected_ability = null + else + to_chat(H, "You will now use [name] with \ + [H.client && H.client.prefs && H.client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_CLICK ? "middle-click" : "shift-click"].") + if(H.selected_ability) + H.selected_ability.button.icon_state = "template" + H.selected_ability = null + button.icon_state = "template_on" + H.selected_ability = src + +/datum/action/item_action/specialist/aimed_shot/can_use_action() + var/mob/living/carbon/human/H = owner + if(istype(H) && !H.is_mob_incapacitated() && !H.lying && (holder_item == H.r_hand || holder_item || H.l_hand)) + return TRUE + +/datum/action/item_action/specialist/aimed_shot/proc/use_ability(atom/A) + var/mob/living/carbon/human/human = owner + if(!istype(A, /mob/living)) + return + + var/mob/living/target = A + + if(target.stat == DEAD || target == human) + return + + var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item + if(world.time < sniper_rifle.aimed_shot_cooldown) + return + + if(!check_can_use(target)) + return + + human.face_atom(target) + + ///Add a decisecond to the default 1.5 seconds for each two tiles to hit. + var/distance = round(get_dist(target, human) * 0.5) + var/f_aiming_time = sniper_rifle.aiming_time + distance + + var/aim_multiplier = 1 + var/aiming_buffs + + if(sniper_rifle.enable_aimed_shot_laser) + aim_multiplier = 0.6 + aiming_buffs++ + + if(HAS_TRAIT(target, TRAIT_SPOTTER_LAZED)) + aim_multiplier = 0.5 + aiming_buffs++ + + if(aiming_buffs > 1) + aim_multiplier = 0.35 + + f_aiming_time *= aim_multiplier + + var/image/lockon_icon = image(icon = 'icons/effects/Targeted.dmi', icon_state = sniper_rifle.sniper_lockon_icon) + + var/x_offset = -target.pixel_x + target.base_pixel_x + var/y_offset = (target.icon_size - world.icon_size) * 0.5 - target.pixel_y + target.base_pixel_y + + lockon_icon.pixel_x = x_offset + lockon_icon.pixel_y = y_offset + target.overlays += lockon_icon + + var/image/lockon_direction_icon + if(!sniper_rifle.enable_aimed_shot_laser) + lockon_direction_icon = image(icon = 'icons/effects/Targeted.dmi', icon_state = "[sniper_rifle.sniper_lockon_icon]_direction", dir = get_cardinal_dir(target, human)) + lockon_direction_icon.pixel_x = x_offset + lockon_direction_icon.pixel_y = y_offset + target.overlays += lockon_direction_icon + if(human.client) + playsound_client(human.client, 'sound/weapons/TargetOn.ogg', human, 50) + playsound(target, 'sound/weapons/TargetOn.ogg', 70, FALSE, 8, falloff = 0.4) + + var/datum/beam/laser_beam + if(sniper_rifle.enable_aimed_shot_laser) + laser_beam = target.beam(human, sniper_rifle.sniper_beam_icon, 'icons/effects/beam.dmi', (f_aiming_time + 1 SECONDS), beam_type = sniper_rifle.sniper_beam_type) + laser_beam.visuals.alpha = 0 + animate(laser_beam.visuals, alpha = initial(laser_beam.visuals.alpha), f_aiming_time, easing = SINE_EASING|EASE_OUT) + + ////timer is (f_spotting_time + 1 SECONDS) because sometimes it janks out before the doafter is done. blame sleeps or something + + if(!do_after(human, f_aiming_time, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, NO_BUSY_ICON)) + target.overlays -= lockon_icon + target.overlays -= lockon_direction_icon + qdel(laser_beam) + return + + target.overlays -= lockon_icon + target.overlays -= lockon_direction_icon + qdel(laser_beam) + + if(!check_can_use(target, TRUE)) + return + + var/obj/projectile/aimed_proj = sniper_rifle.in_chamber + aimed_proj.projectile_flags |= PROJECTILE_BULLSEYE + aimed_proj.AddComponent(/datum/component/homing_projectile, target, human) + sniper_rifle.Fire(target, human) + +/datum/action/item_action/specialist/aimed_shot/proc/check_can_use(mob/M, cover_lose_focus) + var/mob/living/carbon/human/H = owner + var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item + + if(!can_use_action()) + return FALSE + + if(sniper_rifle != H.r_hand && sniper_rifle != H.l_hand) + to_chat(H, SPAN_WARNING("How do you expect to do this without your sniper rifle?")) + return FALSE + + if(!(sniper_rifle.flags_item & WIELDED)) + to_chat(H, SPAN_WARNING("Your aim is not stable enough with one hand. Use both hands!")) + return FALSE + + if(!sniper_rifle.in_chamber) + to_chat(H, SPAN_WARNING("\The [sniper_rifle] is unloaded!")) + return FALSE + + if(get_dist(H, M) < minimum_aim_distance) + to_chat(H, SPAN_WARNING("\The [M] is too close to get a proper shot!")) + return FALSE + + var/obj/projectile/P = sniper_rifle.in_chamber + // TODO: Make the below logic only occur in certain circumstances. Check goggles, maybe? -Kaga + if(check_shot_is_blocked(H, M, P)) + to_chat(H, SPAN_WARNING("Something is in the way, or you're out of range!")) + if(cover_lose_focus) + to_chat(H, SPAN_WARNING("You lose focus.")) + COOLDOWN_START(sniper_rifle, aimed_shot_cooldown, sniper_rifle.aimed_shot_cooldown_delay * 0.5) + return FALSE + + COOLDOWN_START(sniper_rifle, aimed_shot_cooldown, sniper_rifle.aimed_shot_cooldown_delay) + return TRUE + +/datum/action/item_action/specialist/aimed_shot/proc/check_shot_is_blocked(mob/firer, mob/target, obj/projectile/P) + var/list/turf/path = getline2(firer, target, include_from_atom = FALSE) + if(!path.len || get_dist(firer, target) > P.ammo.max_range) + return TRUE + + var/blocked = FALSE + for(var/turf/T in path) + if(T.density || T.opacity) + blocked = TRUE + break + + for(var/obj/O in T) + if(O.get_projectile_hit_boolean(P)) + blocked = TRUE + break + + for(var/obj/effect/particle_effect/smoke/S in T) + blocked = TRUE + break + + return blocked + +// Snipers may enable or disable their laser tracker at will. +/datum/action/item_action/specialist/toggle_laser + +/datum/action/item_action/specialist/toggle_laser/New(mob/living/user, obj/item/holder) + ..() + name = "Toggle Tracker Laser" + button.name = name + button.overlays.Cut() + var/image/IMG = image('icons/mob/hud/actions.dmi', button, "sniper_toggle_laser_on") + button.overlays += IMG + update_button_icon() + +/datum/action/item_action/specialist/toggle_laser/update_button_icon() + var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item + + var/icon = 'icons/mob/hud/actions.dmi' + var/icon_state = "sniper_toggle_laser_[sniper_rifle.enable_aimed_shot_laser ? "on" : "off"]" + + button.overlays.Cut() + var/image/IMG = image(icon, button, icon_state) + button.overlays += IMG + +/datum/action/item_action/specialist/toggle_laser/can_use_action() + var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item + + if(owner.is_mob_incapacitated()) + return FALSE + + if(owner.get_held_item() != sniper_rifle) + to_chat(owner, SPAN_WARNING("How do you expect to do this without the sniper rifle in your hand?")) + return FALSE + return TRUE + +/datum/action/item_action/specialist/toggle_laser/action_activate() + var/obj/item/weapon/gun/rifle/sniper/sniper_rifle = holder_item + + if(owner.get_held_item() != sniper_rifle) + to_chat(owner, SPAN_WARNING("How do you expect to do this without the sniper rifle in your hand?")) + return FALSE + sniper_rifle.toggle_laser(owner, src) + +/obj/item/weapon/gun/rifle/sniper/proc/toggle_laser(mob/user, datum/action/toggling_action) + enable_aimed_shot_laser = !enable_aimed_shot_laser + to_chat(user, SPAN_NOTICE("You flip a switch on \the [src] and [enable_aimed_shot_laser ? "enable" : "disable"] its targeting laser.")) + playsound(user, 'sound/machines/click.ogg', 15, TRUE) + if(!toggling_action) + toggling_action = locate(/datum/action/item_action/specialist/toggle_laser) in actions + if(toggling_action) + toggling_action.update_button_icon() + +/obj/item/weapon/gun/rifle/sniper/verb/toggle_gun_laser() + set category = "Weapons" + set name = "Toggle Laser" + set desc = "Toggles your laser on or off." + set src = usr.contents + + var/obj/item/weapon/gun/rifle/sniper/sniper = get_active_firearm(usr) + if((sniper == src) && has_aimed_shot) + toggle_laser(usr) + +//Pow! Headshot. + +// end of actions sniper spe can take. + +/obj/item/weapon/gun/rifle/sniper/M42A + name = "\improper M42A scoped rifle" + desc = "A heavy sniper rifle manufactured by Armat Systems. It has a scope system and fires armor penetrating rounds out of a 15-round magazine.\n'Peace Through Superior Firepower'" + icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' + icon_state = "m42a" + item_state = "m42a" + unacidable = TRUE + indestructible = 1 + + fire_sound = 'sound/weapons/gun_sniper.ogg' + current_mag = /obj/item/ammo_magazine/sniper + force = 12 + wield_delay = WIELD_DELAY_HORRIBLE //Ends up being 1.6 seconds due to scope + zoomdevicename = "scope" + attachable_allowed = list(/obj/item/attachable/bipod) + starting_attachment_types = list(/obj/item/attachable/sniperbarrel) + flags_gun_features = GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER + map_specific_decoration = TRUE + + flags_item = TWOHANDED|NO_CRYO_STORE + +/obj/item/weapon/gun/rifle/sniper/M42A/verb/toggle_scope_zoom_level() + set name = "Toggle Scope Zoom Level" + set category = "Weapons" + set src in usr + var/obj/item/attachable/scope/variable_zoom/S = attachments["rail"] + S.toggle_zoom_level() + +/obj/item/weapon/gun/rifle/sniper/M42A/handle_starting_attachment() + ..() + var/obj/item/attachable/scope/variable_zoom/S = new(src) + S.hidden = TRUE + S.flags_attach_features &= ~ATTACH_REMOVABLE + S.Attach(src) + update_attachable(S.slot) + +/obj/item/weapon/gun/rifle/sniper/M42A/set_bullet_traits() + LAZYADD(traits_to_give, list( + BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) + )) + +/obj/item/weapon/gun/rifle/sniper/M42A/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 39, "muzzle_y" = 17,"rail_x" = 12, "rail_y" = 20, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) + + +/obj/item/weapon/gun/rifle/sniper/M42A/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_7*3) + set_burst_amount(BURST_AMOUNT_TIER_1) + accuracy_mult = BASE_ACCURACY_MULT * 3 //you HAVE to be able to hit + scatter = SCATTER_AMOUNT_TIER_8 + damage_mult = BASE_BULLET_DAMAGE_MULT + recoil = RECOIL_AMOUNT_TIER_5 + +/obj/item/weapon/gun/rifle/sniper/xm43e1 + name = "\improper XM43E1 experimental anti-materiel rifle" + desc = "An experimental anti-materiel rifle produced by Armat Systems, recently reacquired from the deep storage of an abandoned prototyping facility. This one in particular is currently undergoing field testing. Chambered in 10x99mm Caseless." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' + icon_state = "xm42b" + item_state = "xm42b" + unacidable = TRUE + indestructible = 1 + + fire_sound = 'sound/weapons/sniper_heavy.ogg' + current_mag = /obj/item/ammo_magazine/sniper/anti_materiel //Renamed from anti-tank to align with new identity/description. Other references have been changed as well. -Kaga + force = 12 + wield_delay = WIELD_DELAY_HORRIBLE //Ends up being 1.6 seconds due to scope + zoomdevicename = "scope" + attachable_allowed = list(/obj/item/attachable/bipod) + flags_gun_features = GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER + starting_attachment_types = list(/obj/item/attachable/sniperbarrel) + sniper_beam_type = /obj/effect/ebeam/laser/intense + sniper_beam_icon = "laser_beam_intense" + sniper_lockon_icon = "sniper_lockon_intense" + +/obj/item/weapon/gun/rifle/sniper/XM42B/handle_starting_attachment() + ..() + var/obj/item/attachable/scope/variable_zoom/S = new(src) + S.icon_state = "pmcscope" + S.attach_icon = "pmcscope" + S.flags_attach_features &= ~ATTACH_REMOVABLE + S.Attach(src) + update_attachable(S.slot) + + +/obj/item/weapon/gun/rifle/sniper/XM42B/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 15, "rail_y" = 19, "under_x" = 20, "under_y" = 15, "stock_x" = 20, "stock_y" = 15) + + +/obj/item/weapon/gun/rifle/sniper/XM42B/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_6 * 6 )//Big boy damage, but it takes a lot of time to fire a shot. + //Kaga: Adjusted from 56 (Tier 4, 7*8) -> 30 (Tier 6, 5*6) ticks. 95 really wasn't big-boy damage anymore, although I updated it to 125 to remain consistent with the other 10x99mm caliber weapon (M42C). Now takes only twice as long as the M42A. + set_burst_amount(BURST_AMOUNT_TIER_1) + accuracy_mult = BASE_ACCURACY_MULT + 2*HIT_ACCURACY_MULT_TIER_10 //Who coded this like this, and why? It just calculates out to 1+1=2. Leaving a note here to check back later. + scatter = SCATTER_AMOUNT_TIER_10 + damage_mult = BASE_BULLET_DAMAGE_MULT + recoil = RECOIL_AMOUNT_TIER_1 + +/obj/item/weapon/gun/rifle/sniper/XM42B/set_bullet_traits() + LAZYADD(traits_to_give, list( + BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff), + BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_penetrating), + BULLET_TRAIT_ENTRY_ID("turfs", /datum/element/bullet_trait_damage_boost, 11, GLOB.damage_boost_turfs), + BULLET_TRAIT_ENTRY_ID("breaching", /datum/element/bullet_trait_damage_boost, 11, GLOB.damage_boost_breaching), + //At 1375 per shot it'll take 1 shot to break resin turfs, and a full mag of 8 to break reinforced walls. + BULLET_TRAIT_ENTRY_ID("pylons", /datum/element/bullet_trait_damage_boost, 6, GLOB.damage_boost_pylons) + //At 750 per shot it'll take 3 to break a Pylon (1800 HP). No Damage Boost vs other xeno structures yet, those will require a whole new list w/ the damage_boost trait. + )) + +/* +//Disabled until an identity is better defined. -Kaga +/obj/item/weapon/gun/rifle/sniper/M42B/afterattack(atom/target, mob/user, flag) + if(able_to_fire(user)) + if(get_dist(target,user) <= 8) + to_chat(user, SPAN_WARNING("The [src.name] beeps, indicating that the target is within an unsafe proximity to the rifle, refusing to fire.")) + return + else ..() +*/ + +/obj/item/weapon/gun/rifle/sniper/elite + name = "\improper M42C anti-tank sniper rifle" + desc = "A high-end superheavy magrail sniper rifle from Weyland-Armat chambered in a specialized variant of the heaviest ammo available, 10x99mm Caseless. This weapon requires a specialized armor rig for recoil mitigation in order to be used effectively." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/wy.dmi' + icon_state = "m42c" + item_state = "m42c" //NEEDS A TWOHANDED STATE + + fire_sound = 'sound/weapons/sniper_heavy.ogg' + current_mag = /obj/item/ammo_magazine/sniper/elite + force = 17 + zoomdevicename = "scope" + flags_gun_features = GUN_AUTO_EJECTOR|GUN_WY_RESTRICTED|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER + starting_attachment_types = list(/obj/item/attachable/sniperbarrel) + sniper_beam_type = /obj/effect/ebeam/laser/intense + sniper_beam_icon = "laser_beam_intense" + sniper_lockon_icon = "sniper_lockon_intense" + +/obj/item/weapon/gun/rifle/sniper/elite/handle_starting_attachment() + ..() + var/obj/item/attachable/scope/S = new(src) + S.icon_state = "pmcscope" + S.attach_icon = "pmcscope" + S.flags_attach_features &= ~ATTACH_REMOVABLE + S.Attach(src) + update_attachable(S.slot) + +/obj/item/weapon/gun/rifle/sniper/elite/set_bullet_traits() + LAZYADD(traits_to_give, list( + BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) + )) + +/obj/item/weapon/gun/rifle/sniper/elite/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 15, "rail_y" = 19, "under_x" = 20, "under_y" = 15, "stock_x" = 20, "stock_y" = 15) + +/obj/item/weapon/gun/rifle/sniper/elite/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_6*5) + set_burst_amount(BURST_AMOUNT_TIER_1) + accuracy_mult = BASE_ACCURACY_MULT * 3 //Was previously BAM + HAMT10, similar to the XM42B, and coming out to 1.5? Changed to be consistent with M42A. -Kaga + scatter = SCATTER_AMOUNT_TIER_10 //Was previously 8, changed to be consistent with the XM42B. + damage_mult = BASE_BULLET_DAMAGE_MULT + recoil = RECOIL_AMOUNT_TIER_1 + +/obj/item/weapon/gun/rifle/sniper/elite/simulate_recoil(total_recoil = 0, mob/user, atom/target) + . = ..() + if(.) + var/mob/living/carbon/human/PMC_sniper = user + if(PMC_sniper.lying == 0 && !istype(PMC_sniper.wear_suit,/obj/item/clothing/suit/storage/marine/smartgunner/veteran/pmc) && !istype(PMC_sniper.wear_suit,/obj/item/clothing/suit/storage/marine/veteran)) + PMC_sniper.visible_message(SPAN_WARNING("[PMC_sniper] is blown backwards from the recoil of the [src.name]!"),SPAN_HIGHDANGER("You are knocked prone by the blowback!")) + step(PMC_sniper,turn(PMC_sniper.dir,180)) + PMC_sniper.apply_effect(5, WEAKEN) + +//Type 88 //Based on the actual Dragunov DMR rifle. + +/obj/item/weapon/gun/rifle/sniper/svd + name = "\improper Type 88 designated marksman rifle" + desc = "The standard issue DMR of the UPP, the Type 88 is sought after by competitive shooters and terrorists alike for its high degree of accuracy. Typically loaded with armor-piercing 7.62x54mmR rounds in a 12 round magazine." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi' + icon_state = "type88" + item_state = "type88" + + fire_sound = 'sound/weapons/gun_mg.ogg' + current_mag = /obj/item/ammo_magazine/sniper/svd + attachable_allowed = list( + //Muzzle, + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonet/upp_replica, + /obj/item/attachable/bayonet/upp, + //Under, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/bipod, + //Integrated, + /obj/item/attachable/type88_barrel, + ) + has_aimed_shot = FALSE + flags_gun_features = GUN_AUTO_EJECTOR|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK + starting_attachment_types = list() + sniper_beam_type = null + skill_locked = FALSE + +/obj/item/weapon/gun/rifle/sniper/svd/handle_starting_attachment() + ..() + var/obj/item/attachable/attachie = new /obj/item/attachable/type88_barrel(src) + attachie.flags_attach_features &= ~ATTACH_REMOVABLE + attachie.Attach(src) + update_attachable(attachie.slot) + + var/obj/item/attachable/scope/variable_zoom/integrated/type88sight = new(src) + type88sight.flags_attach_features &= ~ATTACH_REMOVABLE + type88sight.hidden = TRUE + type88sight.Attach(src) + update_attachable(type88sight.slot) + +/obj/item/weapon/gun/rifle/sniper/svd/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 13, "rail_y" = 19, "under_x" = 26, "under_y" = 14, "stock_x" = 24, "stock_y" = 13, "special_x" = 39, "special_y" = 18) + +/obj/item/weapon/gun/rifle/sniper/svd/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_6) + set_burst_amount(BURST_AMOUNT_TIER_1) + accuracy_mult = BASE_ACCURACY_MULT * 3 + scatter = SCATTER_AMOUNT_TIER_8 + damage_mult = BASE_BULLET_DAMAGE_MULT + recoil = RECOIL_AMOUNT_TIER_5 + damage_falloff_mult = 0 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/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index c7a79b9c44ca..15b6a6ca6e87 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -179,6 +179,9 @@ return to_chat(xeno, SPAN_NOTICE("You command the metal bird to come down. Clever girl.")) xeno_announcement(SPAN_XENOANNOUNCE("Your Queen has commanded the metal bird to the hive at [linked_lz]."), xeno.hivenumber, XENO_GENERAL_ANNOUNCE) + var/datum/ares_link/link = GLOB.ares_link + link.log_ares_flight("Unknown", "Remote launch signal for [shuttle.name] received. Authentication garbled.") + link.log_ares_security("Security Alert", "Remote launch signal for [shuttle.name] received. Authentication garbled.") return if(shuttle.destination.id != linked_lz) to_chat(xeno, "The shuttle not ready. The screen reads T-[shuttle.timeLeft(10)]. Have patience.") @@ -317,13 +320,22 @@ .["primary_lz"] = SSticker.mode.active_lz?.linked_lz if(shuttle.destination) .["target_destination"] = shuttle.in_flyby? "Flyby" : shuttle.destination.name - .["destinations"] = list() .["door_status"] = is_remote ? list() : shuttle.get_door_data() - .["flight_configuration"] = is_set_flyby ? "flyby" : "ferry" .["has_flyby_skill"] = skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT) + .["destinations"] = list() + // add flight + .["destinations"] += list( + list( + "id" = DROPSHIP_FLYBY_ID, + "name" = "Flyby", + "available" = TRUE, + "error" = FALSE + ) + ) + for(var/obj/docking_port/stationary/dock in compatible_landing_zones) var/dock_reserved = FALSE for(var/obj/docking_port/mobile/other_shuttle in SSshuttle.mobile) @@ -359,15 +371,16 @@ to_chat(usr, SPAN_WARNING("You can't move to a new destination right now.")) return TRUE - if(is_set_flyby && !skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT)) - to_chat(user, SPAN_WARNING("You don't have the skill to perform a flyby.")) - return FALSE var/is_optimised = FALSE // automatically apply optimisation if user is a pilot if(skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT)) is_optimised = TRUE update_equipment(is_optimised) - if(is_set_flyby) + var/dock_id = params["target"] + if(dock_id == DROPSHIP_FLYBY_ID) + if(!skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT)) + to_chat(user, SPAN_WARNING("You don't have the skill to perform a flyby.")) + return FALSE to_chat(user, SPAN_NOTICE("You begin the launch sequence for a flyby.")) link.log_ares_flight(user.name, "Launched Dropship [shuttle.name] on a flyby.") var/log = "[key_name(user)] launched the dropship [src.shuttleId] on flyby." @@ -375,19 +388,19 @@ log_interact(user, msg = "[log]") shuttle.send_for_flyby() return TRUE - var/dockId = params["target"] + var/list/local_data = ui_data(user) var/found = FALSE playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) for(var/destination in local_data["destinations"]) - if(destination["id"] == dockId) + if(destination["id"] == dock_id) found = TRUE break if(!found) - log_admin("[key_name(user)] may be attempting a href dock exploit on [src] with target location \"[dockId]\"") - to_chat(user, SPAN_WARNING("The [dockId] dock is not available at this time.")) + log_admin("[key_name(user)] may be attempting a href dock exploit on [src] with target location \"[dock_id]\"") + to_chat(user, SPAN_WARNING("The [dock_id] dock is not available at this time.")) return - var/obj/docking_port/stationary/dock = SSshuttle.getDock(dockId) + var/obj/docking_port/stationary/dock = SSshuttle.getDock(dock_id) var/dock_reserved = FALSE for(var/obj/docking_port/mobile/other_shuttle in SSshuttle.mobile) if(dock == other_shuttle.destination) diff --git a/code/modules/shuttle/shuttles/dropship.dm b/code/modules/shuttle/shuttles/dropship.dm index d81484b0343d..e1c2bb9a1f9a 100644 --- a/code/modules/shuttle/shuttles/dropship.dm +++ b/code/modules/shuttle/shuttles/dropship.dm @@ -100,7 +100,7 @@ var/name = "Unidentified Lifesigns" var/input = "Unidentified lifesigns detected onboard. Recommendation: lockdown of exterior access ports, including ducting and ventilation." - shipwide_ai_announcement(input, name, 'sound/AI/unidentified_lifesigns.ogg') + shipwide_ai_announcement(input, name, 'sound/AI/unidentified_lifesigns.ogg', ares_logging = ARES_LOG_SECURITY) set_security_level(SEC_LEVEL_RED) return diff --git a/code/modules/shuttles/marine_ferry.dm b/code/modules/shuttles/marine_ferry.dm index 426d90c1457a..7ec4b2eb7333 100644 --- a/code/modules/shuttles/marine_ferry.dm +++ b/code/modules/shuttles/marine_ferry.dm @@ -230,7 +230,7 @@ if(X && X.stat != DEAD) var/name = "Unidentified Lifesigns" var/input = "Unidentified lifesigns detected onboard. Recommendation: lockdown of exterior access ports, including ducting and ventilation." - shipwide_ai_announcement(input, name, 'sound/AI/unidentified_lifesigns.ogg') + shipwide_ai_announcement(input, name, 'sound/AI/unidentified_lifesigns.ogg', ares_logging = ARES_LOG_SECURITY) set_security_level(SEC_LEVEL_RED) break diff --git a/code/modules/surgery/surgery_initiator.dm b/code/modules/surgery/surgery_initiator.dm index 08b4dbdfed60..8b7506c9b7b8 100644 --- a/code/modules/surgery/surgery_initiator.dm +++ b/code/modules/surgery/surgery_initiator.dm @@ -27,6 +27,13 @@ to_chat(user, SPAN_WARNING("You can't perform surgery under these bad conditions!")) return FALSE + var/obj/limb/surgery_limb = target.get_limb(target_zone) + if(surgery_limb) + var/obj/item/blocker = target.get_sharp_obj_blocker(surgery_limb) + if(blocker) + to_chat(user, SPAN_WARNING("[blocker] [target] is wearing restricts your access to the surgical site, take it off!")) + return + if(user.action_busy) //already doing an action return FALSE @@ -130,6 +137,12 @@ if(surgeryinstance.lying_required && !target.lying) return TRUE + if(surgery_limb) + var/obj/item/blocker = target.get_sharp_obj_blocker(surgery_limb) + if(blocker) + to_chat(user, SPAN_WARNING("[blocker] [target] is wearing restricts your access to the surgical site, take it off!")) + return + if(affecting) if(surgeryinstance.requires_bodypart) if(affecting.status & LIMB_DESTROYED) diff --git a/colonialmarines.dme b/colonialmarines.dme index 07d6a2710262..63140be5e458 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -529,6 +529,7 @@ s// DM Environment file for colonialmarines.dme. #include "code\datums\keybinding\emote.dm" #include "code\datums\keybinding\human.dm" #include "code\datums\keybinding\human_combat.dm" +#include "code\datums\keybinding\human_inventory.dm" #include "code\datums\keybinding\living.dm" #include "code\datums\keybinding\mob.dm" #include "code\datums\keybinding\movement.dm" @@ -1661,12 +1662,10 @@ s// DM Environment file for colonialmarines.dme. #include "code\modules\gear_presets\corpses.dm" #include "code\modules\gear_presets\dust_raider.dm" #include "code\modules\gear_presets\dutch.dm" -#include "code\modules\gear_presets\forcon_survivors.dm" #include "code\modules\gear_presets\fun.dm" #include "code\modules\gear_presets\other.dm" #include "code\modules\gear_presets\pmc.dm" #include "code\modules\gear_presets\royal_marines.dm" -#include "code\modules\gear_presets\survivors.dm" #include "code\modules\gear_presets\synths.dm" #include "code\modules\gear_presets\upp.dm" #include "code\modules\gear_presets\uscm.dm" @@ -1680,6 +1679,21 @@ s// DM Environment file for colonialmarines.dme. #include "code\modules\gear_presets\wy.dm" #include "code\modules\gear_presets\wy_goons.dm" #include "code\modules\gear_presets\yautja.dm" +#include "code\modules\gear_presets\survivors\misc.dm" +#include "code\modules\gear_presets\survivors\survivors.dm" +#include "code\modules\gear_presets\survivors\corsat\preset_corsat.dm" +#include "code\modules\gear_presets\survivors\fiorina_sciannex\preset_fiorina_sciannex.dm" +#include "code\modules\gear_presets\survivors\kutjevo\preset_kutjevo.dm" +#include "code\modules\gear_presets\survivors\lv_522\forcon_survivors.dm" +#include "code\modules\gear_presets\survivors\lv_624\clfship_insert_lv624.dm" +#include "code\modules\gear_presets\survivors\lv_624\preset_lv.dm" +#include "code\modules\gear_presets\survivors\new_varadero\preset_new_varadero.dm" +#include "code\modules\gear_presets\survivors\shivas_snowball\preset_shivas_snowball.dm" +#include "code\modules\gear_presets\survivors\solaris\crashlanding-offices_insert_bigred.dm" +#include "code\modules\gear_presets\survivors\solaris\preset_solaris.dm" +#include "code\modules\gear_presets\survivors\sorokyne_strata\preset_sorokyne_strata.dm" +#include "code\modules\gear_presets\survivors\trijent\crashlanding_upp_bar_insert_trijent.dm" +#include "code\modules\gear_presets\survivors\trijent\preset_trijent.dm" #include "code\modules\hydroponics\botany_disks.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\hydro_tools.dm" @@ -1830,7 +1844,9 @@ s// DM Environment file for colonialmarines.dme. #include "code\modules\mob\living\carbon\human\species\zombie.dm" #include "code\modules\mob\living\carbon\human\species\working_joe\_emote.dm" #include "code\modules\mob\living\carbon\human\species\working_joe\_species.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\damage.dm" #include "code\modules\mob\living\carbon\human\species\working_joe\farewell.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\fire.dm" #include "code\modules\mob\living\carbon\human\species\working_joe\greeting.dm" #include "code\modules\mob\living\carbon\human\species\working_joe\notice.dm" #include "code\modules\mob\living\carbon\human\species\working_joe\question.dm" @@ -2131,9 +2147,13 @@ s// DM Environment file for colonialmarines.dme. #include "code\modules\projectiles\guns\smartgun.dm" #include "code\modules\projectiles\guns\smgs.dm" #include "code\modules\projectiles\guns\souto.dm" -#include "code\modules\projectiles\guns\specialist.dm" #include "code\modules\projectiles\guns\flamer\flamer.dm" #include "code\modules\projectiles\guns\flamer\flameshape.dm" +#include "code\modules\projectiles\guns\specialist\scout.dm" +#include "code\modules\projectiles\guns\specialist\sniper.dm" +#include "code\modules\projectiles\guns\specialist\launcher\grenade_launcher.dm" +#include "code\modules\projectiles\guns\specialist\launcher\launcher.dm" +#include "code\modules\projectiles\guns\specialist\launcher\rocket_launcher.dm" #include "code\modules\projectiles\magazines\flamer.dm" #include "code\modules\projectiles\magazines\lever_action.dm" #include "code\modules\projectiles\magazines\misc.dm" diff --git a/config/example/config.txt b/config/example/config.txt index 181e10e8e150..dcce46434404 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -234,11 +234,8 @@ AUTOOOCMUTE ## The default value assumes youtube-dl is in your system PATH # INVOKE_YOUTUBEDL youtube-dl -## Rounds needed before a gamemode vote is casted. Set to -1 to disable -GAMEMODE_ROUNDS_NEEDED 5 - ## Default gamemode to auto-switch back to after a round has concluded -GAMEMODE_DEFAULT extended +GAMEMODE_DEFAULT Extended ## How long the mob will take to chestburst, in seconds #EMBRYO_BURST_TIMER 450 diff --git a/html/changelogs/AutoChangeLog-pr-4222.yml b/html/changelogs/AutoChangeLog-pr-4222.yml deleted file mode 100644 index 04f165f2bbef..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4222.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - balance: "Adds an extra 75% damage and hive interference to plasma rifle vs xenos." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4411.yml b/html/changelogs/AutoChangeLog-pr-4411.yml deleted file mode 100644 index 91f0f2cac947..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4411.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "TeDGamer" -delete-after: True -changes: - - balance: "All trained+ engineer skill levels affect duration now." - - balance: "Removed double skill duration multiplier for m56d's." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4418.yml b/html/changelogs/AutoChangeLog-pr-4418.yml deleted file mode 100644 index a84fef90dd84..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4418.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - bugfix: "HEFA Knights now spawn with their armor again" - - balance: "HEFA Knights now spawn with 2 HEFA in their helmets" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4458.yml b/html/changelogs/AutoChangeLog-pr-4458.yml deleted file mode 100644 index 3cb5a179bf11..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4458.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "HeresKozmos" -delete-after: True -changes: - - mapadd: "added 9 new tunnels to trijent dam" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4465.yml b/html/changelogs/AutoChangeLog-pr-4465.yml deleted file mode 100644 index 340654480622..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4465.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "HeresKozmos" -delete-after: True -changes: - - mapadd: "added 9 new tunnels to Fiorina SciAnnex" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4487.yml b/html/changelogs/AutoChangeLog-pr-4487.yml deleted file mode 100644 index 15a34fd04de3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4487.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Fix dead huggers converting to non-player huggers" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4488.yml b/html/changelogs/AutoChangeLog-pr-4488.yml deleted file mode 100644 index c569ff5e6250..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4488.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "bostonthebear" -delete-after: True -changes: - - rscadd: "Changes pilot officer timelock from 5 hours as squad marine to 2 hours as DCC" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4489.yml b/html/changelogs/AutoChangeLog-pr-4489.yml deleted file mode 100644 index 968951eaacfb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4489.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheGamerdk" -delete-after: True -changes: - - bugfix: "Adding marines to intel squad broke the crew manifest" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4490.yml b/html/changelogs/AutoChangeLog-pr-4490.yml deleted file mode 100644 index 9e24becf0ca0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4490.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Casper" -delete-after: True -changes: - - bugfix: "fixed cigarette punctuation error" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4491.yml b/html/changelogs/AutoChangeLog-pr-4491.yml deleted file mode 100644 index 143791dd7db7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4491.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Casper" -delete-after: True -changes: - - bugfix: "fixed reagent canister being deleted if ejected with your hands full" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4503.yml b/html/changelogs/AutoChangeLog-pr-4503.yml deleted file mode 100644 index d9c902131457..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4503.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - bugfix: "Fixed a bug with akimbo firing" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4508.yml b/html/changelogs/AutoChangeLog-pr-4508.yml deleted file mode 100644 index 5efe4580a9f7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4508.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - rscdel: "Removed alpha egg on LV522" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4509.yml b/html/changelogs/AutoChangeLog-pr-4509.yml deleted file mode 100644 index 6a050918f065..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4509.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Git-Nivrak" -delete-after: True -changes: - - bugfix: "Fixes no fire delay on m56d in semi-auto and burst fire" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4636.yml b/html/changelogs/AutoChangeLog-pr-4636.yml new file mode 100644 index 000000000000..2f26402bc864 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4636.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - refactor: "Refactored camera code to be less blocking, use typechecks less often, and provide somewhat more fluid descriptions to photos." \ No newline at end of file diff --git a/html/changelogs/archive/2023-09.yml b/html/changelogs/archive/2023-09.yml index ea6f57a4b490..6dc9203f23d8 100644 --- a/html/changelogs/archive/2023-09.yml +++ b/html/changelogs/archive/2023-09.yml @@ -333,3 +333,122 @@ weedable now. - maptweak: LV Comms now always spawn in Tcomms and one either on the east or west river +2023-09-27: + CapCamIII: + - rscadd: Adds upp presets for the unused officer ranks, Kapitan, Lt Kolonel, MajGen, + LtGen, Gen, for use in admin events + - rscadd: Changes UPP conscript rank from weird conscript only rank to Private, + moves UPP soldier to PFC, removing the rank gap between soldier and support + - code_imp: Cleans up UPP rank code by deleting redundant ranks + CapCamIII, AmoryBlaine: + - rscadd: Adds new service uniform sprite that is standard across maps, sprites + by AmoryBlaine + - rscadd: Resprites old dress uniform, renames it, adds to XO vendor as a uniform + choice as it fits there now, sprites by AmoryBlaine + - rscadd: Adds new uniform, command boiler suit like gorman wears in the movie, + available in SO locker, SO vendor, XO vendor, CO vendor, sprites by AmoryBlaine + - rscadd: Adds new brown versions of gloves and boot to custom loadout, also lowers + the price of jungle boots to two, sprites by AmoryBlaine + - rscadd: Seperates officer cap and RO cap, officers get officer cap, QM gets RO + cap, CTs get req cap, sprites once again by AmoryBlaine + - rscadd: UPP boots and gloves use the new brown sprite, as it fits their color + scheme and looks cool. + - bugfix: Freelancer leader now spawns with a knife in their boots + - imageadd: Resprites patrol cap, officer cap, SEA cap, standard black boot, standard + black glove, and formal gloves, sprites by AmoryBlaine + Casper: + - bugfix: fixed reagent canister being deleted if ejected with your hands full + - bugfix: fixed cigarette punctuation error + Drathek: + - bugfix: Fix dead huggers converting to non-player huggers + Git-Nivrak: + - bugfix: Fixes no fire delay on m56d in semi-auto and burst fire + HeresKozmos: + - mapadd: added 9 new tunnels to trijent dam + - mapadd: added 9 new tunnels to Fiorina SciAnnex + Morrow: + - bugfix: Fixed a bug with akimbo firing + - rscdel: Removed alpha egg on LV522 + - rscadd: Added a save-able preference for auto-observe + - bugfix: Fixed numerous problems with HUD observer mode + - code_imp: Created a wrapper for client screen changes + - code_imp: Made check contents less horrendous + Steelpoint: + - mapadd: Sensor Towers have been added to all maps. + - rscadd: UPP survivor radio role identifiers now have a shorter title. + - rscadd: UPP survivors now default to using a players preferred name instead of + a random UPP name. + TeDGamer: + - balance: All trained+ engineer skill levels affect duration now. + - balance: Removed double skill duration multiplier for m56d's. + TheGamerdk: + - bugfix: Adding marines to intel squad broke the crew manifest + Zonespace27: + - bugfix: HEFA Knights now spawn with their armor again + - balance: HEFA Knights now spawn with 2 HEFA in their helmets + - admin: Added skillless subtype of the m707 + - balance: Lowered vulture spotted/unspotted drift from 33/100 to 25/90 + - balance: Lowered vulture scope adjust/move time from 0.5/1.0s to 0.4/0.8s + - balance: Vulture bipod anchors user in place + bostonthebear: + - rscadd: Changes pilot officer timelock from 5 hours as squad marine to 2 hours + as DCC + realforest2001: + - balance: Adds an extra 75% damage and hive interference to plasma rifle vs xenos. +2023-09-28: + Casper: + - bugfix: fixed S&W black market crate not working + - bugfix: fixed flashlights showing incorrect sprite state + Steelpoint: + - rscadd: Alert message regarding Pylon construction around a communications array + now properly emphasizes why it is a threat to Marines, and a benefit to Xenos. + TheGamerdk: + - qol: You can no longer doom yourself by joining as a crit xeno +2023-09-29: + BeagleGaming1: + - bugfix: Whiskey Outpost ground map vote works correctly + - config: Removed unnecessary config + Ben10083: + - soundadd: Multiple new Working Joe voicelines added + Casper: + - bugfix: fixed cameras going invisible on wire cut + Huffie56: + - refactor: divide preset into different file for each map. + Morrow: + - qol: '"Do nothing" dual wield preference' + QuickLode: + - rscdel: removed Pvts from Anchorpoint QRF (rip) + - spellcheck: fixed a typo in CMB call-in + - rscadd: Allows ext webbing to hold firearms. + - bugfix: exosuits which can hold scabbards can hold similar scabbards(ie, machete + and katana) + - rscdel: Removes ext webbing from SO Locker + SpartanBobby: + - maptweak: CL now spawns in a hypersleep bay "Passenger Bay" it's right next to + his office, the CC spawns with him too since his landmark was in the latejoin + bay on the lowerdeck + - maptweak: re-arranged PO bunks should allow for better traffic in and out + - maptweak: fixed symmetry issue in north-south CIC hallway + - maptweak: minor warning stripe decal additions around Almayer + Steelpoint: + - rscadd: Synthetic equipment vendor now can vend fuel cannisters and all colour + variants of the synthetic utility vest. + - rscadd: Synthetic cosmetic vendor now can vend all colour variants of the standard + Marine helmet, MP and Combat Technician uniforms, the welder chestrig and security + hud glasses. + Zonespace27: + - bugfix: Picking up a dropped pred bracer will no longer leave it stuck to your + hand. + - bugfix: Yautja can no longer mark xenoes as honorable + - rscadd: You can now fold a combi-stick using the new "collapse combi-stick" verb + and/or keybind. Defaults to the space bar. + - bugfix: Using a Yautja relay beacon now properly decloaks you +2023-09-30: + Drathek: + - bugfix: Join as xeno no longer offers buried larva spawns if there are larva queue + candidates + Huffie56: + - refactor: Cleaning specialist.dm file + Morrow: + - rscdel: Removed more clown gear from maps + - bugfix: Fixed taking control of crit xenos diff --git a/html/changelogs/archive/2023-10.yml b/html/changelogs/archive/2023-10.yml new file mode 100644 index 000000000000..a511276351e7 --- /dev/null +++ b/html/changelogs/archive/2023-10.yml @@ -0,0 +1,155 @@ +2023-10-01: + QuickLode: + - bugfix: Allows M46C prototype rifle to accept standard M41A MK2 rubber munitions +2023-10-02: + Ben10083: + - bugfix: fixed a Working Joe voiceline from not working + Casper: + - ui: added microwave TGUI + Morrow: + - bugfix: Fixed fake incomplete surgeries + - bugfix: Fixed manual distress signal manual call options + - bugfix: Fixed a WO distress signal over announcing + Steelpoint: + - balance: Tool Pouch can now hold the same types of items that a toolbelt can hold. + It is still restricted to 4 inventory slots. + - balance: Eggs no longer are resistant to certain kinds of melee attacks. Making + them far easier to kill in melee. + realforest2001: + - balance: Reduces power cost for plasma caster use, and creation of thwei crystals/health + capsules. +2023-10-03: + Drathek: + - rscadd: Add the last larva queue message to observer's status panel + Huffie56: + - qol: remove welding google from squad comtech vendor to avoid him to waste point + since tool vendor have them for free. + JackieEstegado: + - bugfix: Fixed runtime that could happen when melleing an egg. + Morrow: + - balance: If a mob is on top of a reflective wall the wall no longer functions + - balance: Bullets will not longer get eaten by xeno special structures unless you + click directly on them + - bugfix: '"Fixed" missing window frame icon states' + Private Tristan: + - balance: all resin fruits now contain 30u of fruit resin along with their secondary + reagents. + - balance: Alacrit fruits now contain catecholamine plasma instead of pheromone + plasma. + Steelpoint: + - rscadd: Xenomorph hives can now form an alliance with Colonial Marshals. + Sulaboy, Hidgamer, Steelpoint: + - rscadd: Adds the surgical drop pouch item. It comes in green, blue and black. + Only available from the synthetic vendor currently. + - imageadd: Adds sprites for the surgical drop pouches. +2023-10-04: + BeagleGaming1: + - rscadd: Added keybinds to allow inventory manipulation + Morrow: + - admin: Operation time logging + - balance: Underbarrel extinguisher no longer requires wield + - bugfix: Re-added previous UPP changes that were lost in soft conflict + - spellcheck: Removed some ambiguous text about loyalties for UPP survivors + - bugfix: Fixed storage depth for internal storages + - bugfix: Candle boxes can now only hold candles + blackdragonTOW: + - sounddel: removed 300+ ancient and unused Piano and Violin notes. +2023-10-05: + Drathek: + - rscadd: Restore the stat panel options menu to change the stat panel font size + - bugfix: Fix getFlatIcon not resizing its template nor respect appearance_flags + of RESET_COLOR and RESET_ALPHA + Morrow: + - bugfix: Fixed req door accesses + - rscadd: Added NVG optics + - rscadd: Added a hotkey to cycle optics + - rscadd: Added special marine raider optic + - rscadd: Added examine text for optics + - rscadd: Added research publication to advanced medical optic + - rscdel: Removed functional tube NVGs from gameplay + - refactor: Moved some optics code around to make it less redundant + - bugfix: Fixed a bug with duplicate optic actions + - bugfix: Fixed a reported bug where HUDs would stay on forever with destruction + of a helmet + - balance: Comms relays now have a five minute cooldown to be re-pylon'd after a + pylon was destroyed + - bugfix: Pylons now account for stored larva + - bugfix: Fixed floodlight stacking to make mostly invincible walls + - refactor: Refactored 90% of the floodlight code + Steelpoint: + - ui: Added personnel job titles to the handheld crew monitor, to make it easier + to tell find out exactly what role's you are looking for. Also slightly expands + the default monitor screen size to accommodate the entire personnel text on + screen. +2023-10-06: + blackdragonTOW: + - bugfix: fixed spider dead sprite to not have white space (is transparent instead) +2023-10-08: + Kivts: + - rscadd: You can partially protect yourself from flu and other disease by wearing + a mask and other PPE. Doesnt affect Black Goo. + Steelpoint: + - rscadd: Black and white beret's have been added as loadout options for all characters + as headwear. + - rscadd: More cosmetic options are on offer for Synthetics. Includes white and + black berets, standard or darker engineering and mp uniforms and all camo options + for the poncho. + - rscadd: The Synth Councillor and Synth Utility uniforms can now roll their sleeves. + blackdragonTOW: + - spellcheck: Altered inconsistent dropship ammo names + irRegularGuy646: + - rscadd: Added new "M1A1" ballistic goggle reskin + kiVts: + - rscadd: Spades can now remove botany plants. + - rscadd: Plants now globally take more water to grow. + - code_imp: removed all mention of lighting in botany trays. + - bugfix: Research computer no longer shows "for" for every simulation result. + realforest2001: + - rscadd: Added a Do Not Disturb feature for MOST phones. (Overwatch and a couple + others excluded). + spartanbobby: + - maptweak: Fixes floating Cameras and Light in the maint tunnels north of south + of brig + - maptweak: Fixes incorrect Shower tiles in maint shower north of engineering + - maptweak: Fixes incorrect area in maint south of VC bunk + - maptweak: Removes Piano from USS Almayer upper lifeboat area +2023-10-09: + SpartanBobby, esselnek: + - rscadd: tactical shotguns now come standard with their stock. Yes you can remove + it if you dont want it + - rscadd: new tactical shotgun stock sprite done by esselnek +2023-10-10: + BeagleGaming1: + - code_imp: prop guns will copy attachments + CapCamIII: + - rscdel: XO can no longer take a sword as their personal weapon in their vendor. + realforest2001: + - rscadd: Added missing flight record for Queen dropship summon. + - code_imp: Added security record option for shipwide_ai_announcement. + - rscadd: Added security records for unidentified lifeforms announcement. +2023-10-11: + BeagleGaming1: + - rscadd: Light floor can be examined to tell if it is on, off, or broken. + - code_imp: Light floor subtypes for easier mapping + Birdtalon: + - bugfix: You can now pick up paper bins + - bugfix: Campfires stop consuming wood when full + Zonespace27: + - rscdel: Predators can no longer see their or others cross-round honor count. + irRegularGuy646: + - bugfix: fixed new goggle's on helmet sprite +2023-10-12: + QuickLode: + - rscadd: Adds a handheld distress beacon for the Colonial Marshal. They can use + this to signal distress which in turn allows reinforcements in the form of Anchorpoint + Marine QRF or nearby CMB teams. Admins do the final check. + - rscadd: Adds a CMB Patrol Team which responds to "Marshals in Distress" call. + - admin: headset admin response no longer specifies USCM origin(as this is used + for USCM, WY, and now CMB) + - spellcheck: fixes a CMB typo in response message. Also a miniscule change to HG + 37-12 desc. + - spellcheck: fixes 2 misc typos in CMB Inspections + harryob: + - rscadd: origin descriptions are now displayed when selecting an origin + mullenpaul: + - ui: tweaked flyby controls to make them in line with other destinations diff --git a/html/statbrowser.js b/html/statbrowser.js index 81bd8cdf9c8d..78eb7d4e5716 100644 --- a/html/statbrowser.js +++ b/html/statbrowser.js @@ -17,6 +17,17 @@ if (!String.prototype.trim) { // Status panel implementation ------------------------------------------------ var status_tab_parts = ["Loading..."]; var current_tab = null; +var local_fontsize; +// Per `storage.js` for tgui: +// Localstorage can sometimes throw an error, even if DOM storage is not +// disabled in IE11 settings. +// See: https://superuser.com/questions/1080011 +try { + local_fontsize = localStorage.getItem("fontsize"); +} catch (error) { + local_fontsize = 12; +} +var current_fontsize = local_fontsize ? parseInt(local_fontsize) : 12; // in px, also determines line height and category header sizes for the verb menus var mc_tab_parts = [["Loading...", ""]]; var href_token = null; var spells = []; @@ -232,8 +243,8 @@ function spell_cat_check(cat) { } } -function tab_change(tab) { - if (tab == current_tab) return; +function tab_change(tab, force) { + if (!force && tab == current_tab) return; if (document.getElementById(current_tab)) document.getElementById(current_tab).className = "button"; // disable active on last button current_tab = tab; @@ -698,6 +709,7 @@ function draw_verbs(cat) { a.href = "#"; a.onclick = make_verb_onclick(command.replace(/\s/g, "-")); a.className = "grid-item"; + a.style.lineHeight = current_fontsize + 2 + "px"; var t = document.createElement("span"); t.textContent = command; t.className = "grid-item-text"; @@ -716,6 +728,7 @@ function draw_verbs(cat) { // do addition here var header = document.createElement("h3"); header.textContent = cat; + header.style.fontSize = current_fontsize + 4 + "px"; content.appendChild(header); content.appendChild(additions[cat]); } @@ -848,6 +861,7 @@ Byond.subscribeTo("remove_verb_list", function (v) { // passes a 2D list of (verbcategory, verbname) creates tabs and adds verbs to respective list // example (IC, Say) Byond.subscribeTo("init_verbs", function (payload) { + statcontentdiv.style.fontSize = current_fontsize + "px"; wipe_verbs(); // remove all verb categories so we can replace them checkStatusTab(); // remove all status tabs verb_tabs = payload.panel_tabs; @@ -868,6 +882,7 @@ Byond.subscribeTo("init_verbs", function (payload) { draw_verbs(current_tab); } } + createOptionsButton(); SendTabsToByond(); }); @@ -1019,3 +1034,29 @@ Byond.subscribeTo("remove_sdql2", remove_sdql2); Byond.subscribeTo("remove_mc", remove_mc); Byond.subscribeTo("add_verb_list", add_verb_list); + +function createOptionsButton() { + var button = document.createElement("BUTTON"); + button.onclick = function () { + openOptionsMenu(); + this.blur(); + }; + button.id = "options"; + button.textContent = "Options"; + button.className = "options"; + button.style.order = 999; // last please + button.style.marginLeft = "auto"; + button.style.marginRight = "2%"; + menu.appendChild(button); +} + +function openOptionsMenu() { + Byond.command("Open-Statbrowser-Options " + current_fontsize); +} + +Byond.subscribeTo("change_fontsize", function (new_fontsize) { + current_fontsize = parseInt(new_fontsize); + localStorage.setItem("fontsize", current_fontsize.toString()); + statcontentdiv.style.fontSize = current_fontsize + "px"; + tab_change(current_tab, true); // Redraw the current tab +}); diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 2fa8d673454f..8246bb4f70aa 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ 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/eyes.dmi b/icons/mob/humans/onmob/eyes.dmi index 2be8eb8d6fad..c4d743f61e38 100644 Binary files a/icons/mob/humans/onmob/eyes.dmi and b/icons/mob/humans/onmob/eyes.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..dad985c1e11c 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/helmet_garb.dmi b/icons/mob/humans/onmob/helmet_garb.dmi index 325aed72b155..cc91c47fe2fc 100644 Binary files a/icons/mob/humans/onmob/helmet_garb.dmi and b/icons/mob/humans/onmob/helmet_garb.dmi differ diff --git a/icons/mob/humans/onmob/mask.dmi b/icons/mob/humans/onmob/mask.dmi index badd31ad722c..896da0201bd2 100644 Binary files a/icons/mob/humans/onmob/mask.dmi and b/icons/mob/humans/onmob/mask.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/ties.dmi b/icons/mob/humans/onmob/ties.dmi index d82226002ec8..c8fb98c0c5c1 100644 Binary files a/icons/mob/humans/onmob/ties.dmi and b/icons/mob/humans/onmob/ties.dmi differ diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi index a3e34fc2e16c..873c325a560e 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..1595402fef50 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/glasses.dmi b/icons/obj/items/clothing/glasses.dmi index b5a175e448bd..13dd0c542c6e 100644 Binary files a/icons/obj/items/clothing/glasses.dmi and b/icons/obj/items/clothing/glasses.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/helmet_visors.dmi b/icons/obj/items/clothing/helmet_visors.dmi index 6ba0cfe5623e..f47bc9aa26d2 100644 Binary files a/icons/obj/items/clothing/helmet_visors.dmi and b/icons/obj/items/clothing/helmet_visors.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/ties.dmi b/icons/obj/items/clothing/ties.dmi index e0e25b9f579d..f236480c7b9d 100644 Binary files a/icons/obj/items/clothing/ties.dmi and b/icons/obj/items/clothing/ties.dmi differ diff --git a/icons/obj/items/clothing/ties_overlay.dmi b/icons/obj/items/clothing/ties_overlay.dmi index 89396622aba3..8db72b11cbe3 100644 Binary files a/icons/obj/items/clothing/ties_overlay.dmi and b/icons/obj/items/clothing/ties_overlay.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/icons/obj/items/weapons/guns/attachments/stock.dmi b/icons/obj/items/weapons/guns/attachments/stock.dmi index a15409b808ca..d3a95284a23f 100644 Binary files a/icons/obj/items/weapons/guns/attachments/stock.dmi and b/icons/obj/items/weapons/guns/attachments/stock.dmi differ diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 4ec089e10bdd..b29802bd6548 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -16567,8 +16567,8 @@ dir = 6 }, /turf/open/floor{ - dir = 4; - icon_state = "asteroidwarning" + dir = 1; + icon_state = "asteroidfloor" }, /area/bigredv2/caves_lambda) "aTB" = ( @@ -16576,8 +16576,8 @@ dir = 8 }, /turf/open/floor{ - dir = 4; - icon_state = "asteroidwarning" + dir = 1; + icon_state = "asteroidfloor" }, /area/bigredv2/caves_lambda) "aTC" = ( @@ -16945,14 +16945,12 @@ dir = 9 }, /turf/open/floor{ - dir = 6; icon_state = "asteroidwarning" }, /area/bigredv2/caves_lambda) "aUC" = ( /obj/effect/decal/remains/human, /turf/open/floor{ - dir = 6; icon_state = "asteroidwarning" }, /area/bigredv2/caves_lambda) @@ -29578,6 +29576,13 @@ icon_state = "darkblue2" }, /area/bigredv2/caves/eta/research) +"gXh" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/floor{ + dir = 1; + icon_state = "asteroidwarning" + }, +/area/bigredv2/caves_lambda) "gXp" = ( /turf/open/mars_cave{ icon_state = "mars_cave_6" @@ -29752,7 +29757,7 @@ /area/bigredv2/outside/filtration_plant) "htp" = ( /obj/structure/transmitter/colony_net{ - callable = 0; + do_not_disturb = 1; dir = 4; phone_category = "Lambda Labs"; phone_color = "red"; @@ -30885,6 +30890,15 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_sw) +"jNO" = ( +/obj/structure/machinery/sensortower{ + pixel_x = -9 + }, +/turf/open/floor{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/bigredv2/caves_lambda) "jOc" = ( /obj/structure/machinery/door/poddoor/almayer/closed{ dir = 4; @@ -77158,7 +77172,7 @@ aOn aOn aOn aOn -aOn +aTv aTA aUB wQC @@ -77375,7 +77389,7 @@ gXp gXp gXp gXp -aSm +aTw aTB aUC wQC @@ -77592,9 +77606,9 @@ tQw ahw tQw tQw -aSn -gXp -gXp +gXh +aTv +aMT tQw tQw pIN @@ -77809,9 +77823,9 @@ tQw tQw xFZ xFZ -xFZ -tQw -tQw +aSm +jNO +aMT tQw xFZ ahy @@ -78027,8 +78041,8 @@ eFh aao aao aao -gmN -xFZ +aSm +aMV sNQ aao aao diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index 120a30286fb6..0d4ed21934d0 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -1797,6 +1797,13 @@ icon_state = "sterile_white" }, /area/fiorina/station/medbay) +"aUM" = ( +/obj/item/clothing/head/welding, +/turf/open/floor/prison{ + dir = 9; + icon_state = "greenfull" + }, +/area/fiorina/tumor/civres) "aVd" = ( /obj/effect/landmark/monkey_spawn, /turf/open/floor/plating/prison, @@ -6379,6 +6386,12 @@ }, /turf/open/floor/prison, /area/fiorina/lz/near_lzI) +"dKN" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison{ + icon_state = "floor_plate" + }, +/area/fiorina/tumor/civres) "dKX" = ( /obj/effect/landmark/survivor_spawner, /turf/open/floor/plating/plating_catwalk/prison, @@ -12625,6 +12638,11 @@ /obj/effect/landmark/wo_supplies/storage/belts/knifebelt, /turf/open/floor/prison, /area/fiorina/station/lowsec) +"hDq" = ( +/obj/effect/landmark/corpsespawner/engineer, +/obj/effect/decal/cleanable/blood, +/turf/open/auto_turf/sand/layer1, +/area/fiorina/tumor/civres) "hDr" = ( /obj/item/stool, /turf/open/floor/prison{ @@ -12993,7 +13011,6 @@ /turf/open/floor/plating/prison, /area/fiorina/lz/near_lzI) "hQH" = ( -/obj/item/reagent_container/food/snacks/clownstears, /obj/structure/closet/crate, /turf/open/floor/plating/prison, /area/fiorina/station/civres_blue) @@ -13078,9 +13095,7 @@ /area/fiorina/lz/near_lzII) "hTr" = ( /obj/structure/closet, -/obj/item/clothing/mask/gas/clown_hat, /obj/effect/spawner/random/gun/shotgun/midchance, -/obj/item/clothing/under/marine/ucf_clown, /turf/open/floor/plating/prison, /area/fiorina/maintenance) "hTs" = ( @@ -14331,6 +14346,13 @@ icon_state = "darkyellowfull2" }, /area/fiorina/station/telecomm/lz1_tram) +"iKf" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/prison{ + dir = 8; + icon_state = "green" + }, +/area/fiorina/tumor/civres) "iKg" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_core, /turf/open/floor/plating/prison, @@ -15318,7 +15340,6 @@ /area/fiorina/lz/near_lzII) "jnr" = ( /obj/structure/filingcabinet, -/obj/item/card/data/clown, /obj/effect/landmark/objective_landmark/medium, /turf/open/floor/prison{ dir = 4; @@ -16405,6 +16426,12 @@ }, /turf/open/floor/prison/chapel_carpet, /area/fiorina/station/chapel) +"jUy" = ( +/obj/structure/machinery/sensortower, +/turf/open/floor/prison{ + icon_state = "floor_plate" + }, +/area/fiorina/tumor/civres) "jUz" = ( /obj/structure/surface/table/reinforced/prison{ flipped = 1 @@ -26100,8 +26127,6 @@ /area/fiorina/tumor/aux_engi) "pON" = ( /obj/structure/closet, -/obj/item/storage/backpack/clown, -/obj/item/toy/bikehorn, /turf/open/floor/prison{ dir = 4; icon_state = "bluecorner" @@ -28100,6 +28125,10 @@ icon_state = "floor_plate" }, /area/fiorina/tumor/civres) +"qWO" = ( +/obj/item/tool/weldingtool, +/turf/open/auto_turf/sand/layer1, +/area/fiorina/tumor/civres) "qXl" = ( /obj/structure/stairs/perspective{ dir = 8; @@ -50047,7 +50076,7 @@ lhQ tzj lvs lhQ -qty +aUM lsl xFx apw @@ -50258,10 +50287,10 @@ rMg hDx lhQ oVC +dKN hDx -hDx -hDx -apw +jUy +hDq apw apw amF @@ -50473,7 +50502,7 @@ qty hDx whu hDx -apw +qWO mZo apw amF @@ -50896,7 +50925,7 @@ qty muB nsg nsg -nsg +iKf apw hDx taX 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 dac318453cdf..d000153afd71 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -11958,12 +11958,6 @@ icon_state = "brown" }, /area/lv522/atmos/north_command_centre) -"fpS" = ( -/obj/item/prop/helmetgarb/helmet_nvg/marsoc, -/turf/open/floor/corsat{ - icon_state = "plate" - }, -/area/lv522/oob) "fpW" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -99528,7 +99522,7 @@ tiQ joK cPU daL -fpS +xcU dLz xcU edk diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm index ae0f259c8b2d..336dc6a90212 100644 --- a/maps/map_files/LV624/LV624.dmm +++ b/maps/map_files/LV624/LV624.dmm @@ -1119,8 +1119,10 @@ }, /area/lv624/ground/barrens/containers) "afu" = ( -/obj/structure/machinery/floodlight, /obj/item/ammo_casing, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/plating{ dir = 9; icon_state = "warnplate" @@ -1154,7 +1156,9 @@ }, /area/lv624/ground/barrens/central_barrens) "afy" = ( -/obj/structure/machinery/floodlight, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/plating{ dir = 5; icon_state = "warnplate" @@ -1205,11 +1209,6 @@ /obj/item/ammo_casing, /turf/open/floor/plating, /area/lv624/ground/barrens/central_barrens) -"afM" = ( -/obj/structure/machinery/floodlight, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/plating, -/area/lv624/ground/barrens/central_barrens) "afN" = ( /obj/item/ammo_casing, /turf/open/floor/plating, @@ -1389,10 +1388,6 @@ "agA" = ( /turf/open/floor/sandstone/runed, /area/lv624/ground/caves/south_east_caves) -"agC" = ( -/obj/structure/machinery/floodlight, -/turf/open/floor/plating, -/area/lv624/ground/barrens/central_barrens) "agD" = ( /obj/structure/surface/table/reinforced{ dir = 8; @@ -1407,8 +1402,10 @@ /turf/open/floor/plating, /area/lv624/ground/barrens/central_barrens) "agF" = ( -/obj/structure/machinery/floodlight, /obj/item/ammo_casing, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/plating, /area/lv624/ground/barrens/central_barrens) "agG" = ( @@ -1585,7 +1582,9 @@ }, /area/lv624/ground/barrens/west_barrens/ceiling) "ahM" = ( -/obj/structure/machinery/floodlight, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/plating{ dir = 10; icon_state = "warnplate" @@ -1625,7 +1624,9 @@ }, /area/lv624/ground/barrens/central_barrens) "ahT" = ( -/obj/structure/machinery/floodlight, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/plating{ dir = 6; icon_state = "warnplate" @@ -13047,6 +13048,10 @@ "cCr" = ( /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/east_jungle) +"cDr" = ( +/obj/structure/girder, +/turf/open/gm/grass/grass1, +/area/lv624/ground/caves/north_central_caves) "cDQ" = ( /obj/item/ammo_magazine/sentry{ current_rounds = 0; @@ -14942,6 +14947,12 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/dirtgrassborder/west, /area/lv624/ground/jungle/west_central_jungle) +"hpG" = ( +/turf/open/floor{ + dir = 1; + icon_state = "bot" + }, +/area/lv624/ground/caves/north_central_caves) "hpN" = ( /obj/structure/surface/table, /obj/effect/landmark/good_item, @@ -15608,6 +15619,9 @@ /obj/structure/flora/bush/ausbushes/lavendergrass, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_west_jungle) +"jeL" = ( +/turf/closed/wall/r_wall, +/area/lv624/ground/caves/north_central_caves) "jga" = ( /turf/open/gm/river, /area/lv624/ground/jungle/west_jungle) @@ -15987,6 +16001,13 @@ /obj/effect/landmark/monkey_spawn, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_jungle) +"kbn" = ( +/obj/structure/machinery/sensortower, +/turf/open/floor{ + dir = 1; + icon_state = "bot" + }, +/area/lv624/ground/caves/north_central_caves) "kbr" = ( /obj/structure/showcase{ desc = "An ancient, dusty tomb with strange alien writing. It's best not to touch it."; @@ -17988,6 +18009,12 @@ /obj/structure/flora/bush/ausbushes/pointybush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_central_jungle) +"oHU" = ( +/obj/structure/girder, +/turf/open/floor{ + icon_state = "asteroidplating" + }, +/area/lv624/ground/caves/north_central_caves) "oJL" = ( /obj/effect/landmark/crap_item, /turf/open/gm/grass/grass1, @@ -21055,6 +21082,9 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) +"wbM" = ( +/turf/open/floor, +/area/lv624/ground/caves/north_central_caves) "wbP" = ( /obj/structure/flora/jungle/vines/light_3, /turf/open/floor/sandstone/runed, @@ -21257,6 +21287,11 @@ /obj/effect/decal/remains/xeno, /turf/open/gm/dirt, /area/lv624/ground/barrens/central_barrens) +"wwI" = ( +/turf/open/floor{ + icon_state = "asteroidplating" + }, +/area/lv624/ground/caves/north_central_caves) "wxP" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/jungle/north_jungle) @@ -40945,11 +40980,11 @@ aaH aaw aaw aaw +oHU aaw aaw -aaw -aaw -aaw +cDr +jeL aaF aaF abm @@ -41023,7 +41058,7 @@ ajW afI ajW ajW -agC +ajW afN ajW ajW @@ -41175,9 +41210,9 @@ aaw aaw aaw aaw -aaw -aaw -aaw +wwI +wbM +jeL aaF abm abm @@ -41402,10 +41437,10 @@ aay aaw aaw aaw -aaw -aaw -aaw -aaw +wbM +kbn +wbM +jeL abm abm abm @@ -41630,10 +41665,10 @@ aaz aay aaw aaw -aaw -aaw -aaw -aaw +wwI +hpG +wbM +jeL abm abm abm @@ -41858,10 +41893,10 @@ aah aaH aaw aaw -aaw -aaw -aaw -aaw +wbM +wbM +wwI +jeL abm abm abm @@ -42087,9 +42122,9 @@ aaH aaw aaw aaw -aaw -aaw -aaw +cDr +jeL +jeL abm abm abm @@ -42158,7 +42193,7 @@ jaa wVk wVk afx -afM +agf ajW agi ajW @@ -42168,7 +42203,7 @@ agT ahh ahl afN -agC +ajW ahS afk wVk @@ -43303,7 +43338,7 @@ ajW agl ajW ajW -agC +ajW ajW afN eah diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm index 2787ade09f5c..e03bf8cdcbe4 100644 --- a/maps/map_files/New_Varadero/New_Varadero.dmm +++ b/maps/map_files/New_Varadero/New_Varadero.dmm @@ -7371,6 +7371,9 @@ /obj/item/circuitboard/airlock, /turf/open/floor/shiva, /area/varadero/interior/technical_storage) +"eOK" = ( +/turf/open/floor/plating, +/area/varadero/interior_protected/caves/central) "eOZ" = ( /obj/structure/bed/chair{ dir = 1 @@ -10629,6 +10632,11 @@ icon_state = "asteroidplating" }, /area/varadero/interior/maintenance) +"gPE" = ( +/turf/open/floor/shiva{ + icon_state = "multi_tiles" + }, +/area/varadero/interior_protected/caves/central) "gPG" = ( /turf/open/gm/dirt{ icon_state = "desert2" @@ -21737,6 +21745,14 @@ icon_state = "asteroidplating" }, /area/varadero/interior/hall_NW) +"nYi" = ( +/obj/structure/machinery/sensortower{ + pixel_x = -9 + }, +/turf/open/floor/shiva{ + icon_state = "floor3" + }, +/area/varadero/interior_protected/caves/central) "nYx" = ( /obj/structure/machinery/storm_siren{ dir = 8; @@ -26663,6 +26679,9 @@ }, /turf/open/gm/dirt, /area/varadero/exterior/lz2_near) +"raW" = ( +/turf/closed/wall, +/area/varadero/interior_protected/caves/central) "rbd" = ( /obj/item/stack/sheet/wood/small_stack, /turf/open/floor/plating/icefloor{ @@ -27524,6 +27543,10 @@ icon_state = "asteroidplating" }, /area/varadero/interior/maintenance/north) +"rAt" = ( +/obj/structure/window/framed/colony, +/turf/open/floor/plating, +/area/varadero/interior_protected/caves/central) "rAy" = ( /obj/structure/bedsheetbin, /turf/open/floor/shiva{ @@ -53317,9 +53340,9 @@ etv xxk xxk mCF -aOg -mCF -mCF +raW +rAt +rAt cty hoC mCF @@ -53499,9 +53522,9 @@ toU cto xxk meS -aOg -aOg -mCF +eOK +gPE +gPE cty cty mCF @@ -53681,9 +53704,9 @@ etv xxk xxk aOg -mCF -mCF -hoC +eOK +gPE +nYi cty aOg aOg @@ -53862,9 +53885,9 @@ ixr toU xxk xxk +eOK mCF -mCF -hoC +gPE cty cty aOg @@ -54045,7 +54068,7 @@ mMZ xxk xxk mCF -mCF +eOK cty cty cty diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm index edbef5a964c5..334c7e71f8b6 100644 --- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm +++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm @@ -22551,9 +22551,13 @@ /turf/open/auto_turf/snow/brown_base/layer0, /area/strata/ag/exterior/nearlz2) "bwy" = ( -/obj/structure/surface/table/reinforced/prison, -/obj/item/device/radio, -/turf/open/auto_turf/strata_grass/layer0_mud, +/obj/structure/machinery/sensortower{ + pixel_x = -8 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, /area/strata/ug/interior/jungle/platform/east/scrub) "bwA" = ( /obj/structure/flora/grass/tallgrass/ice/corner{ @@ -32937,6 +32941,11 @@ }, /turf/open/auto_turf/ice/layer1, /area/strata/ag/exterior/marsh) +"ioi" = ( +/turf/open/floor/strata{ + icon_state = "multi_tiles" + }, +/area/strata/ug/interior/jungle/platform/east/scrub) "ioz" = ( /obj/structure/bed/nest, /obj/effect/decal/cleanable/blood/gibs/core, @@ -39136,6 +39145,9 @@ icon_state = "floor3" }, /area/strata/ug/interior/outpost/jung/dorms/sec1) +"sPF" = ( +/turf/open/floor/strata, +/area/strata/ug/interior/jungle/platform/east/scrub) "sQs" = ( /turf/open/asphalt/cement{ icon_state = "cement9" @@ -75328,9 +75340,9 @@ rpX tnM wZZ bwE -bqf -csY -bqf +ioi +sPF +ioi btL btE wZZ @@ -75523,9 +75535,9 @@ rpX tnM wZZ wZZ -btK +sPF bwy -bqf +sPF bDB wZZ wZZ @@ -75718,9 +75730,9 @@ rpX tnM wZZ bqf -csZ -bwE -bqf +ioi +sPF +ioi wZZ bqf wZZ diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 36fd4cb7f2a2..fb842c754dd9 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -1052,7 +1052,8 @@ name = "ship-grade camera" }, /turf/open/floor/almayer{ - icon_state = "plate" + dir = 4; + icon_state = "green" }, /area/almayer/living/starboard_garden) "adp" = ( @@ -1073,15 +1074,6 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/north1) -"ads" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_y = 8 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north1) "adt" = ( /obj/item/reagent_container/glass/bucket/janibucket{ pixel_x = -1; @@ -1116,8 +1108,8 @@ pixel_y = -9 }, /obj/item/stock_parts/scanning_module/adv{ - pixel_y = 15; - pixel_x = 4 + pixel_x = 4; + pixel_y = 15 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -1170,8 +1162,11 @@ }, /area/almayer/hallways/aft_hallway) "adI" = ( -/obj/docking_port/stationary/escape_pod/south, -/turf/open/floor/plating, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/machinery/light/small, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/hull/upper_hull/u_m_p) "adO" = ( /turf/closed/wall/almayer, @@ -1190,9 +1185,9 @@ /area/almayer/lifeboat_pumps/north1) "adR" = ( /obj/structure/machinery/door/airlock/almayer/generic{ + access_modified = 1; name = "\improper Pilot's Office"; - req_one_access_txt = "3;22;19"; - access_modified = 1 + req_one_access_txt = "3;22;19" }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 8 @@ -1223,12 +1218,11 @@ }, /area/almayer/lifeboat_pumps/north1) "aea" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/structure/machinery/light{ + dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) "aeb" = ( /obj/structure/machinery/door/poddoor/shutters/almayer/open{ @@ -1241,10 +1235,9 @@ }, /area/almayer/hallways/starboard_hallway) "aec" = ( -/obj/structure/surface/table/almayer, -/obj/effect/spawner/random/tool, +/obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/north1) "aed" = ( @@ -1259,10 +1252,9 @@ }, /area/almayer/living/basketball) "aee" = ( -/obj/structure/surface/table/almayer, -/obj/effect/spawner/random/toolbox, +/obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/north1) "aef" = ( @@ -1277,11 +1269,12 @@ }, /area/almayer/living/offices/flight) "aei" = ( -/obj/structure/bed/chair{ - dir = 8 +/obj/structure/machinery/light{ + dir = 1 }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 5; + icon_state = "red" }, /area/almayer/lifeboat_pumps/north1) "aej" = ( @@ -1336,11 +1329,12 @@ /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) "aex" = ( -/turf/open/floor/almayer{ - dir = 6; - icon_state = "red" +/obj/item/reagent_container/food/drinks/cans/beer{ + pixel_x = 6; + pixel_y = 12 }, -/area/almayer/shipboard/starboard_missiles) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/lifeboat_pumps/north2) "aey" = ( /obj/structure/machinery/alarm/almayer{ dir = 1 @@ -1367,6 +1361,9 @@ /obj/structure/machinery/light{ dir = 1 }, +/obj/structure/sign/safety/rewire{ + pixel_y = 32 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -1378,9 +1375,9 @@ /area/almayer/lifeboat_pumps/north2) "aeD" = ( /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; req_one_access = null; - req_one_access_txt = "2;7"; - access_modified = 1 + req_one_access_txt = "2;7" }, /obj/structure/machinery/door/poddoor/almayer/open{ dir = 4; @@ -1528,6 +1525,7 @@ }, /area/almayer/hallways/aft_hallway) "aeW" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/machinery/cm_vending/sorted/tech/electronics_storage, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) @@ -1654,15 +1652,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) -"afp" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "red" - }, -/area/almayer/lifeboat_pumps/north1) "afq" = ( /obj/effect/step_trigger/clone_cleaner, /obj/effect/decal/warning_stripes{ @@ -1733,16 +1722,10 @@ "afz" = ( /turf/open/floor/almayer/empty, /area/almayer/hallways/vehiclehangar) -"afA" = ( +"afB" = ( /obj/structure/machinery/light{ dir = 1 }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "red" - }, -/area/almayer/lifeboat_pumps/north1) -"afB" = ( /turf/open/floor/almayer{ dir = 9; icon_state = "red" @@ -1863,11 +1846,11 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + access_modified = 1; dir = 1; name = "\improper Particle Cannon Systems Room"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -1882,9 +1865,6 @@ icon_state = "test_floor4" }, /area/almayer/engineering/upper_engineering/starboard) -"afY" = ( -/turf/open/floor/grass, -/area/almayer/living/starboard_garden) "afZ" = ( /obj/structure/bed/chair/comfy/blue{ dir = 8 @@ -1929,16 +1909,12 @@ icon_state = "bluecorner" }, /area/almayer/living/offices/flight) -"agh" = ( -/obj/structure/flora/bush/ausbushes/var3/fullgrass, -/turf/open/floor/grass, -/area/almayer/living/starboard_garden) "agi" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; req_access = null; req_one_access = null; - req_one_access_txt = "3;22;19"; - access_modified = 1 + req_one_access_txt = "3;22;19" }, /obj/structure/machinery/door/poddoor/almayer/open{ dir = 4; @@ -1957,12 +1933,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/aft_hallway) -"agm" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hallways/aft_hallway) "agn" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 @@ -2003,12 +1973,6 @@ "agu" = ( /turf/open/floor/almayer, /area/almayer/living/officer_study) -"agv" = ( -/obj/structure/machinery/power/apc/almayer{ - dir = 1 - }, -/turf/open/floor/grass, -/area/almayer/living/starboard_garden) "agw" = ( /obj/structure/machinery/light{ dir = 8 @@ -2030,13 +1994,10 @@ /turf/open/floor/plating, /area/almayer/living/basketball) "agB" = ( -/obj/structure/flora/bush/ausbushes/var3/fullgrass, -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 +/turf/open/floor/almayer{ + dir = 9; + icon_state = "red" }, -/turf/open/floor/grass, /area/almayer/living/starboard_garden) "agG" = ( /obj/structure/stairs/perspective{ @@ -2110,10 +2071,6 @@ icon_state = "test_floor4" }, /area/almayer/living/officer_study) -"agP" = ( -/obj/structure/flora/bush/ausbushes/ppflowers, -/turf/open/floor/grass, -/area/almayer/living/starboard_garden) "agQ" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ @@ -2121,12 +2078,10 @@ }, /area/almayer/living/cafeteria_officer) "agS" = ( -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" }, -/turf/open/floor/grass, /area/almayer/living/starboard_garden) "agT" = ( /turf/open/floor/prison{ @@ -2138,6 +2093,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) "agV" = ( @@ -2161,10 +2117,10 @@ "aha" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/almayer/command/reinforced{ + access_modified = 1; name = "\improper Commanding Officer's Quarters"; req_access = null; - req_access_txt = "31"; - access_modified = 1 + req_access_txt = "31" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -2186,11 +2142,11 @@ /area/almayer/living/cafeteria_officer) "ahd" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 1; req_access = null; req_one_access = null; - req_one_access_txt = "3;22;19"; - access_modified = 1 + req_one_access_txt = "3;22;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -2248,8 +2204,10 @@ }, /area/almayer/hull/upper_hull/u_m_s) "ahl" = ( -/obj/structure/flora/bush/ausbushes/var3/ywflowers, -/turf/open/floor/grass, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "green" + }, /area/almayer/living/starboard_garden) "ahn" = ( /obj/structure/machinery/light/small{ @@ -2267,10 +2225,6 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/living/offices/flight) -"ahp" = ( -/obj/structure/flora/bush/ausbushes/var3/brflowers, -/turf/open/floor/grass, -/area/almayer/living/starboard_garden) "ahq" = ( /obj/structure/machinery/alarm/almayer{ dir = 1 @@ -2289,42 +2243,12 @@ icon_state = "green" }, /area/almayer/hallways/aft_hallway) -"ahs" = ( -/obj/structure/surface/table/almayer, -/obj/item/paper_bin/uscm{ - pixel_y = 6 - }, -/obj/item/tool/pen, -/obj/structure/sign/safety/terminal{ - pixel_x = -17 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "aht" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) -"ahu" = ( -/obj/item/device/flashlight/lamp/green{ - pixel_y = 10 - }, -/obj/structure/surface/table/almayer, -/obj/item/trash/uscm_mre{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/reagent_container/food/snacks/mre_pack/meal1{ - pixel_x = -13; - pixel_y = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "ahv" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -2340,19 +2264,17 @@ /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) "ahx" = ( -/obj/structure/closet, -/obj/item/clothing/under/marine/engineer, -/turf/open/floor/almayer{ - icon_state = "plate" - }, +/obj/structure/window/framed/almayer/hull, +/turf/open/floor/plating, /area/almayer/hull/upper_hull/u_m_s) "ahy" = ( -/obj/structure/closet, -/obj/item/clothing/under/marine, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = 28 }, -/area/almayer/hull/upper_hull/u_m_s) +/turf/closed/wall/almayer, +/area/almayer/living/starboard_garden) "ahz" = ( /obj/structure/machinery/light{ dir = 1 @@ -2375,12 +2297,6 @@ /obj/structure/window/framed/almayer/hull, /turf/open/floor/plating, /area/almayer/hull/upper_hull/u_f_s) -"ahF" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hallways/aft_hallway) "ahG" = ( /obj/structure/machinery/door/airlock/almayer/engineering{ dir = 2; @@ -2420,11 +2336,9 @@ }, /area/almayer/hallways/aft_hallway) "ahN" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) +/obj/structure/flora/bush/ausbushes/var3/ywflowers, +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "ahR" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, @@ -2456,24 +2370,19 @@ icon_state = "bluecorner" }, /area/almayer/living/offices/flight) -"ahW" = ( -/obj/structure/surface/rack, -/obj/item/tool/extinguisher/mini{ - pixel_x = -4 +"ahX" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" }, -/obj/item/tool/extinguisher/mini{ - pixel_x = 6 +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 }, +/obj/structure/machinery/door/airlock/almayer/maint, /turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) -"ahX" = ( -/obj/structure/machinery/light/small{ - dir = 4 + icon_state = "test_floor4" }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_f_s) +/area/almayer/hull/upper_hull/u_a_s) "ahY" = ( /obj/structure/machinery/light, /obj/structure/surface/table/woodentable/fancy, @@ -2520,9 +2429,9 @@ "aib" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; req_one_access = null; - req_one_access_txt = "7;19"; - access_modified = 1 + req_one_access_txt = "7;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -2683,6 +2592,13 @@ "aiw" = ( /turf/open/floor/almayer, /area/almayer/engineering/starboard_atmos) +"aiy" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 3 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/starboard_hallway) "aiz" = ( /obj/structure/closet, /obj/item/clothing/under/marine, @@ -2724,12 +2640,10 @@ /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) "aiH" = ( -/obj/item/tool/crew_monitor, -/obj/structure/surface/rack, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_s) +/area/almayer/living/starboard_garden) "aiJ" = ( /obj/effect/step_trigger/teleporter_vector{ name = "Almayer_Down3"; @@ -2741,14 +2655,11 @@ }, /area/almayer/stair_clone/upper) "aiP" = ( -/obj/structure/machinery/light/small{ - dir = 1 - }, -/obj/structure/largecrate/random, /turf/open/floor/almayer{ - icon_state = "plate" + dir = 4; + icon_state = "red" }, -/area/almayer/hull/upper_hull/u_m_s) +/area/almayer/living/starboard_garden) "aiQ" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/faxmachine, @@ -2774,6 +2685,9 @@ /obj/structure/closet, /obj/item/device/flashlight/pen, /obj/item/attachable/reddot, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -2789,6 +2703,7 @@ "aiU" = ( /obj/structure/surface/table/almayer, /obj/item/card/id/visa, +/obj/item/tool/crew_monitor, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -2970,7 +2885,10 @@ /area/almayer/hallways/aft_hallway) "ajD" = ( /obj/structure/surface/table/almayer, -/obj/effect/spawner/random/tool, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22"; + pixel_y = 8 + }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) "ajE" = ( @@ -3139,6 +3057,7 @@ /area/almayer/hull/upper_hull/u_a_s) "ake" = ( /obj/structure/largecrate/random/barrel/white, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -3151,25 +3070,21 @@ }, /area/almayer/shipboard/weapon_room) "akk" = ( -/obj/structure/window/reinforced/tinted/frosted, -/obj/structure/mirror{ - pixel_x = -28 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 +/obj/structure/machinery/door/window/westright{ + dir = 4 }, -/turf/open/floor/almayer{ - icon_state = "sterile" +/obj/structure/machinery/shower{ + dir = 4 }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/plating_catwalk, /area/almayer/living/commandbunks) "akl" = ( /obj/structure/machinery/light{ dir = 1 }, /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "dark_sterile" }, /area/almayer/living/commandbunks) "akm" = ( @@ -3444,20 +3359,22 @@ }, /area/almayer/hallways/starboard_hallway) "akY" = ( -/obj/effect/step_trigger/message/memorial, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/structure/cable/heavyduty{ + icon_state = "4-8" }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/living/starboard_garden) "alb" = ( -/obj/structure/machinery/door/window/westright{ - dir = 4 +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 }, -/obj/structure/machinery/shower{ - dir = 4 +/obj/structure/mirror{ + pixel_x = -28 }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "dark_sterile" }, /area/almayer/living/commandbunks) "alc" = ( @@ -3465,7 +3382,7 @@ dir = 8 }, /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "dark_sterile" }, /area/almayer/living/commandbunks) "ald" = ( @@ -3477,29 +3394,29 @@ /obj/structure/machinery/light{ dir = 4 }, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/structure/bed/chair{ + dir = 8 }, +/turf/open/floor/almayer, /area/almayer/living/starboard_garden) "alf" = ( -/obj/structure/machinery/light/small{ +/obj/structure/machinery/light{ dir = 8 }, -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/atmos_alert{ - dir = 4; - pixel_y = 5 +/obj/structure/bed/chair{ + dir = 4 }, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_s) +/area/almayer/living/starboard_garden) "alg" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 +/obj/structure/flora/bush/ausbushes/ppflowers, +/obj/structure/bed/chair{ + dir = 4 }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_s) +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "ali" = ( /turf/open/floor/almayer{ dir = 8; @@ -3559,15 +3476,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/aft_hallway) -"alr" = ( -/obj/structure/machinery/light/small{ - dir = 4 - }, -/obj/structure/largecrate/random/barrel/green, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "als" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -3581,6 +3489,15 @@ /obj/item/device/radio, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) +"alv" = ( +/obj/structure/machinery/camera/autoname/almayer{ + dir = 8; + name = "ship-grade camera" + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_f_p) "alw" = ( /obj/structure/machinery/door/airlock/almayer/generic{ dir = 2; @@ -3717,10 +3634,27 @@ }, /area/almayer/command/cic) "amb" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 80 + }, +/obj/structure/window/reinforced{ + dir = 4; + health = 80 + }, +/obj/structure/machinery/shower{ + dir = 1 + }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/pilotbunks) "amd" = ( -/turf/open/floor/almayer, +/obj/structure/machinery/vending/cola{ + density = 0; + pixel_y = 16 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/pilotbunks) "amg" = ( /turf/open/floor/plating/plating_catwalk, @@ -3951,7 +3885,11 @@ pixel_x = -17; pixel_y = 7 }, -/obj/structure/machinery/cm_vending/clothing/pilot_officer, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/machinery/disposal, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -3972,7 +3910,17 @@ }, /area/almayer/hallways/aft_hallway) "and" = ( -/obj/effect/landmark/yautja_teleport, +/obj/structure/window/reinforced{ + dir = 4; + health = 80 + }, +/obj/structure/window/reinforced{ + dir = 8; + health = 80 + }, +/obj/structure/machinery/shower{ + dir = 1 + }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/pilotbunks) "anf" = ( @@ -4198,6 +4146,8 @@ /obj/structure/surface/table/almayer, /obj/item/clipboard, /obj/item/tool/pen, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/tool, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) "anO" = ( @@ -4320,14 +4270,6 @@ "aoi" = ( /turf/open/floor/almayer, /area/almayer/shipboard/navigation) -"aok" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/emails, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "red" - }, -/area/almayer/shipboard/starboard_missiles) "aol" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -4615,13 +4557,10 @@ }, /area/almayer/hallways/stern_hallway) "aoV" = ( -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - dir = 10; - icon_state = "red" + icon_state = "test_floor4" }, /area/almayer/lifeboat_pumps/north1) "aoW" = ( @@ -4743,21 +4682,15 @@ /turf/open/floor/almayer, /area/almayer/hallways/port_hallway) "apq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "cargo" + icon_state = "plate" }, /area/almayer/living/pilotbunks) "apr" = ( -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, +/obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ - dir = 6; - icon_state = "red" + icon_state = "test_floor4" }, /area/almayer/lifeboat_pumps/north1) "aps" = ( @@ -4774,9 +4707,15 @@ /obj/structure/machinery/power/apc/almayer{ dir = 1 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/pilotbunks) "apu" = ( +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, /turf/open/floor/almayer{ dir = 10; icon_state = "red" @@ -4834,12 +4773,6 @@ icon_state = "orange" }, /area/almayer/hallways/hangar) -"apF" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/grass, -/area/almayer/living/starboard_garden) "apI" = ( /obj/structure/machinery/door/airlock/almayer/command{ dir = 2; @@ -4902,8 +4835,8 @@ dir = 1 }, /obj/structure/pipes/vents/pump/no_boom{ - welded = 1; - name = "Secure Reinforced Air Vent" + name = "Secure Reinforced Air Vent"; + welded = 1 }, /turf/open/floor/almayer{ icon_state = "sterile_green" @@ -5070,10 +5003,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering) -"aqi" = ( -/obj/structure/prop/almayer/ship_memorial, -/turf/open/floor/plating/almayer, -/area/almayer/living/starboard_garden) "aqj" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -5084,7 +5013,11 @@ /turf/open/floor/plating, /area/almayer/engineering/upper_engineering) "aqk" = ( -/turf/open/floor/plating/almayer, +/obj/structure/sign/safety/escapepod{ + pixel_x = 8; + pixel_y = -32 + }, +/turf/open/floor/almayer, /area/almayer/living/starboard_garden) "aqm" = ( /obj/item/bedsheet/brown, @@ -5139,9 +5072,11 @@ /turf/open/floor/almayer, /area/almayer/shipboard/weapon_room) "aqw" = ( -/obj/structure/machinery/cm_vending/clothing/pilot_officer, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "mono" }, /area/almayer/living/pilotbunks) "aqx" = ( @@ -5158,16 +5093,16 @@ }, /area/almayer/hallways/starboard_hallway) "aqy" = ( -/obj/structure/machinery/camera/autoname/almayer{ - dir = 8; - name = "ship-grade camera"; - pixel_x = 27; - pixel_y = -27 - }, /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 4 }, -/turf/open/floor/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, /area/almayer/living/pilotbunks) "aqz" = ( /obj/structure/machinery/door/airlock/almayer/generic{ @@ -5317,12 +5252,6 @@ "arb" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/morgue) -"arc" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/open/floor/grass, -/area/almayer/living/starboard_garden) "ard" = ( /obj/structure/filingcabinet, /obj/item/folder/yellow, @@ -5433,13 +5362,13 @@ }, /area/almayer/hallways/starboard_hallway) "arp" = ( -/obj/item/roller, -/obj/item/roller, -/obj/structure/surface/rack, +/obj/structure/bed/chair{ + dir = 4 + }, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_s) +/area/almayer/living/starboard_garden) "arq" = ( /obj/structure/bed/chair{ dir = 4 @@ -5468,13 +5397,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering) -"aru" = ( -/obj/structure/surface/table/almayer, -/obj/item/weapon/gun/rifle/m41a/stripped, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "arw" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/disposalpipe/junction{ @@ -5485,21 +5407,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering) -"ary" = ( -/obj/structure/surface/table/almayer, -/obj/item/tool/wrench, -/obj/item/reagent_container/food/drinks/cans/souto/cherry{ - pixel_x = 4; - pixel_y = 14 - }, -/obj/item/attachable/lasersight{ - pixel_x = -14; - pixel_y = 12 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "arz" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ @@ -5556,14 +5463,6 @@ icon_state = "redfull" }, /area/almayer/engineering/upper_engineering) -"arI" = ( -/obj/structure/closet, -/obj/item/clothing/under/marine/mp, -/obj/item/device/flash, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "arJ" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -5647,18 +5546,20 @@ /area/almayer/command/cic) "ase" = ( /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "cargo" }, /area/almayer/living/pilotbunks) "asf" = ( -/obj/structure/machinery/shower{ - dir = 8 +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, -/obj/structure/window/reinforced/tinted/frosted, -/obj/structure/machinery/door/window/westright, -/obj/item/tool/soap, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "dark_sterile" }, /area/almayer/living/pilotbunks) "asi" = ( @@ -5841,10 +5742,10 @@ /area/almayer/engineering/engineering_workshop/hangar) "asF" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + access_modified = 1; name = "\improper AI Reception"; req_access = null; - req_one_access_txt = "91;92"; - access_modified = 1 + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -5952,11 +5853,8 @@ }, /area/almayer/command/cic) "asS" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer, -/area/almayer/hallways/aft_hallway) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/starboard_garden) "asT" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, @@ -5970,7 +5868,9 @@ }, /area/almayer/medical/morgue) "asV" = ( -/obj/structure/machinery/floodlight/landing, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -6219,11 +6119,11 @@ /area/almayer/hull/upper_hull/u_a_s) "atA" = ( /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; dir = 1; name = "\improper Spare Bomb Suit"; req_one_access = null; - req_one_access_txt = "35"; - access_modified = 1 + req_one_access_txt = "35" }, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) @@ -6344,24 +6244,19 @@ icon_state = "test_floor4" }, /area/almayer/command/cic) -"atS" = ( -/obj/structure/machinery/light, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/open/floor/almayer{ - icon_state = "sterile" - }, -/area/almayer/living/pilotbunks) "atT" = ( /obj/structure/toilet{ - dir = 8 + dir = 1 }, -/turf/open/floor/almayer{ - icon_state = "sterile" +/obj/structure/window/reinforced{ + dir = 4; + health = 80 }, +/obj/structure/window/reinforced{ + dir = 8; + health = 80 + }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/living/pilotbunks) "atU" = ( /obj/structure/machinery/status_display{ @@ -6383,6 +6278,11 @@ icon_state = "blue" }, /area/almayer/hallways/aft_hallway) +"atW" = ( +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/lifeboat_pumps/north1) "atY" = ( /obj/structure/closet/emcloset, /obj/item/clothing/mask/gas, @@ -6411,11 +6311,18 @@ /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) "aub" = ( -/obj/structure/machinery/vending/cigarette, +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 9; + icon_state = "red" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/lifeboat_pumps/north1) "auc" = ( /obj/effect/step_trigger/clone_cleaner, /obj/structure/machinery/door/poddoor/almayer/open{ @@ -6724,10 +6631,10 @@ dir = 2 }, /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + access_modified = 1; dir = 2; name = "Telecommunications"; - req_access_txt = "6"; - access_modified = 1 + req_access_txt = "6" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -6740,7 +6647,9 @@ }, /area/almayer/engineering/engineering_workshop/hangar) "auJ" = ( -/obj/structure/machinery/floodlight/landing, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -6866,12 +6775,11 @@ }, /area/almayer/engineering/engineering_workshop/hangar) "auZ" = ( -/obj/structure/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, /obj/structure/machinery/light, -/turf/open/floor/almayer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/pilotbunks) "ava" = ( /obj/effect/decal/warning_stripes{ @@ -6910,10 +6818,11 @@ /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) "avd" = ( -/obj/item/tool/warning_cone, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 }, +/turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) "ave" = ( /obj/item/reagent_container/glass/bucket/janibucket, @@ -6945,10 +6854,10 @@ /area/almayer/hallways/aft_hallway) "avk" = ( /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; dir = 1; req_one_access = null; - req_one_access_txt = "35"; - access_modified = 1 + req_one_access_txt = "35" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -7003,19 +6912,11 @@ /turf/open/floor/plating, /area/almayer/shipboard/weapon_room) "avx" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_y = 8 - }, -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_x = -16; - pixel_y = 8 - }, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/structure/machinery/light{ + dir = 1 }, -/area/almayer/lifeboat_pumps/north1) +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "avz" = ( /obj/structure/machinery/light, /obj/structure/machinery/vending/security, @@ -7069,16 +6970,15 @@ }, /area/almayer/medical/containment) "avJ" = ( -/obj/item/clothing/head/helmet/marine{ - pixel_x = 16; - pixel_y = 6 +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + dir = 2; + name = "\improper Evacuation Airlock SU-5"; + req_access = null }, -/obj/item/reagent_container/food/snacks/grown/poppy, -/obj/effect/step_trigger/message/memorial, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "test_floor4" }, -/area/almayer/living/starboard_garden) +/area/almayer/powered) "avK" = ( /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -7194,14 +7094,11 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/living/pilotbunks) "avV" = ( -/obj/item/reagent_container/food/snacks/grown/poppy{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/effect/step_trigger/message/memorial, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/structure/machinery/power/apc/almayer{ + dir = 1 }, +/obj/structure/bed/chair, +/turf/open/floor/grass, /area/almayer/living/starboard_garden) "avW" = ( /obj/structure/surface/table/reinforced/prison, @@ -7236,12 +7133,12 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/command/cic) "avZ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 9 +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/obj/structure/machinery/light{ + dir = 1 }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/lifeboat_pumps/south1) +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "awa" = ( /turf/open/shuttle/dropship{ icon_state = "rasputin15" @@ -7260,32 +7157,16 @@ /turf/closed/wall/almayer/reinforced, /area/almayer/living/pilotbunks) "awe" = ( -/obj/structure/surface/table/almayer, -/obj/item/prop/helmetgarb/gunoil{ - pixel_x = -6; - pixel_y = 9 - }, -/obj/item/tool/screwdriver{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/structure/machinery/light/small{ +/turf/open/floor/plating/almayer, +/area/almayer/living/starboard_garden) +"awi" = ( +/obj/structure/bed/chair{ dir = 8 }, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_s) -"awh" = ( -/obj/item/stool, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_s) -"awi" = ( -/obj/structure/closet/fireaxecabinet{ - pixel_y = 32 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_s) +/area/almayer/living/starboard_garden) "awj" = ( /obj/structure/machinery/photocopier, /obj/structure/sign/safety/terminal{ @@ -7336,7 +7217,9 @@ /obj/structure/machinery/light{ dir = 1 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/pilotbunks) "awt" = ( /turf/open/floor/almayer{ @@ -7402,11 +7285,11 @@ /area/almayer/command/cic) "awB" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 1; name = "\improper Engineering Storage"; req_one_access = null; - req_one_access_txt = "2;7"; - access_modified = 1 + req_one_access_txt = "2;7" }, /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -7523,10 +7406,13 @@ /area/almayer/living/pilotbunks) "awZ" = ( /obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/machinery/computer/emails{ - dir = 1 +/obj/item/paper_bin/uscm{ + pixel_x = 8; + pixel_y = 12 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" }, -/turf/open/floor/almayer, /area/almayer/living/pilotbunks) "axa" = ( /turf/open/shuttle/dropship{ @@ -7614,9 +7500,11 @@ icon_state = "NW-out"; layer = 2.5 }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, /turf/open/floor/almayer{ - dir = 8; - icon_state = "green" + icon_state = "test_floor4" }, /area/almayer/hallways/aft_hallway) "axu" = ( @@ -7948,7 +7836,7 @@ pixel_y = 15 }, /obj/structure/machinery/light, -/obj/structure/transmitter/rotary{ +/obj/structure/transmitter/rotary/no_dnd{ name = "Bravo Overwatch Telephone"; phone_category = "Command"; phone_id = "Bravo Overwatch" @@ -8055,12 +7943,11 @@ }, /area/almayer/command/cic) "ayP" = ( -/obj/structure/surface/table/reinforced/almayer_B, -/obj/item/storage/bible, +/obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "test_floor4" }, -/area/almayer/living/bridgebunks) +/area/almayer/hull/upper_hull/u_f_s) "ayQ" = ( /obj/structure/platform_decoration{ dir = 4 @@ -8637,7 +8524,7 @@ pixel_y = -5; req_one_access_txt = "1;4" }, -/obj/structure/transmitter/rotary{ +/obj/structure/transmitter/rotary/no_dnd{ name = "Combat Information Center Telephone"; phone_category = "Command"; phone_id = "Combat Information Center"; @@ -8669,11 +8556,11 @@ /area/almayer/command/cic) "aAG" = ( /obj/structure/machinery/door/airlock/almayer/medical{ + access_modified = 1; dir = 2; name = "Morgue"; req_access_txt = "25"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -8814,9 +8701,9 @@ /area/almayer/medical/containment/cell) "aBf" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + access_modified = 1; name = "Telecommunications"; - req_access_txt = "6"; - access_modified = 1 + req_access_txt = "6" }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 8 @@ -9047,15 +8934,16 @@ /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Port Railguns and Viewing Room" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_f_p) "aBP" = ( /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; dir = 1; - req_one_access = list(36); - access_modified = 1 + req_one_access = list(36) }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -9088,7 +8976,7 @@ /obj/structure/machinery/light{ dir = 1 }, -/obj/structure/transmitter/rotary{ +/obj/structure/transmitter/rotary/no_dnd{ name = "Charlie Overwatch Telephone"; phone_category = "Command"; phone_id = "Charlie Overwatch" @@ -9240,9 +9128,7 @@ /obj/structure/sink{ pixel_y = 24 }, -/turf/open/floor/almayer{ - icon_state = "sterile" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) "aCv" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ @@ -9345,9 +9231,7 @@ pixel_y = 16 }, /obj/item/tool/soap, -/turf/open/floor/almayer{ - icon_state = "sterile" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) "aDg" = ( /obj/structure/machinery/light/small{ @@ -10070,9 +9954,9 @@ name = "\improper Brig Lockdown Shutter" }, /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 2; - req_one_access = list(2,34,30); - access_modified = 1 + req_one_access = list(2,34,30) }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -10108,6 +9992,16 @@ icon_state = "plate" }, /area/almayer/command/cichallway) +"aGc" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "green" + }, +/area/almayer/hallways/port_hallway) "aGd" = ( /turf/open/floor/almayer{ dir = 8; @@ -10215,26 +10109,25 @@ }, /area/almayer/hallways/aft_hallway) "aGP" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 }, /turf/open/floor/almayer{ - icon_state = "plate" + dir = 5; + icon_state = "red" }, -/area/almayer/hull/upper_hull/u_f_p) +/area/almayer/lifeboat_pumps/north1) "aGQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/almayer/maint{ - req_one_access = null; - req_one_access_txt = "2;30;34" +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 }, /turf/open/floor/almayer{ - icon_state = "test_floor4" + dir = 9; + icon_state = "red" }, -/area/almayer/hull/upper_hull/u_f_p) +/area/almayer/lifeboat_pumps/north1) "aGR" = ( /obj/effect/step_trigger/clone_cleaner, /obj/effect/decal/warning_stripes{ @@ -10312,7 +10205,13 @@ /obj/structure/mirror{ pixel_y = 21 }, -/turf/open/floor/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, /area/almayer/living/numbertwobunks) "aHl" = ( /obj/structure/machinery/portable_atmospherics/canister/air, @@ -10324,9 +10223,7 @@ }, /obj/structure/machinery/door/window/westleft, /obj/structure/window/reinforced/tinted/frosted, -/turf/open/floor/almayer{ - icon_state = "mono" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/living/numbertwobunks) "aHo" = ( /obj/structure/machinery/computer/working_joe{ @@ -10380,12 +10277,12 @@ pixel_y = 1 }, /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; dir = 1; name = "\improper Engineering Storage"; no_panel = 1; req_one_access = null; - req_one_access_txt = "2;7"; - access_modified = 1 + req_one_access_txt = "2;7" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -10400,12 +10297,12 @@ pixel_y = 1 }, /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; dir = 1; name = "\improper Engineering Storage"; no_panel = 1; req_one_access = null; - req_one_access_txt = "2;7"; - access_modified = 1 + req_one_access_txt = "2;7" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -10491,13 +10388,12 @@ }, /area/almayer/living/numbertwobunks) "aHY" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/structure/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, -/obj/structure/machinery/disposal, /turf/open/floor/almayer{ - dir = 8; - icon_state = "red" + icon_state = "cargo" }, /area/almayer/shipboard/starboard_missiles) "aHZ" = ( @@ -10598,16 +10494,13 @@ }, /area/almayer/lifeboat_pumps/north1) "aIx" = ( -/obj/item/tool/weldpack, -/obj/structure/surface/rack, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north1) +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "aIB" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/north1) +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "aIC" = ( /obj/structure/surface/table/almayer, /obj/effect/decal/warning_stripes{ @@ -10655,10 +10548,10 @@ "aIQ" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/almayer/command/reinforced{ + access_modified = 1; name = "\improper XO's Quarters"; req_access = null; - req_access_txt = "1"; - access_modified = 1 + req_access_txt = "1" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -10683,10 +10576,10 @@ dir = 2 }, /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + access_modified = 1; dir = 2; name = "Telecommunications"; - req_access_txt = "6"; - access_modified = 1 + req_access_txt = "6" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -10928,18 +10821,20 @@ }, /area/almayer/command/cic) "aJJ" = ( -/obj/item/tool/screwdriver, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/north1) +/obj/structure/flora/bush/ausbushes/var3/brflowers, +/obj/structure/bed/chair, +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "aJL" = ( -/obj/structure/surface/rack, -/obj/item/frame/rack{ - pixel_y = 19 - }, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/structure/surface/table/almayer, +/obj/item/reagent_container/food/snacks/mre_pack/meal5, +/obj/item/device/flashlight/lamp{ + pixel_x = 3; + pixel_y = 12 }, -/area/almayer/lifeboat_pumps/north1) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "aJM" = ( /obj/docking_port/stationary/escape_pod/east, /turf/open/floor/plating, @@ -10949,22 +10844,9 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south1) -"aJW" = ( -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/starboard_garden) "aKa" = ( /turf/open/floor/almayer, /area/almayer/command/cichallway) -"aKc" = ( -/obj/item/stack/cable_coil, -/obj/structure/surface/rack, -/obj/item/attachable/flashlight/grip, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "aKf" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -10976,12 +10858,9 @@ }, /area/almayer/command/cichallway) "aKg" = ( -/obj/structure/surface/rack, -/obj/item/device/multitool, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) +/obj/structure/flora/bush/ausbushes/var3/brflowers, +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "aKi" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -11135,19 +11014,28 @@ }, /area/almayer/command/cic) "aKG" = ( -/obj/structure/surface/table/almayer, -/obj/item/tool/extinguisher, -/obj/item/tool/crowbar, -/turf/open/floor/almayer, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, /area/almayer/living/pilotbunks) "aKH" = ( -/obj/structure/janitorialcart, -/obj/item/tool/mop, -/obj/structure/machinery/light/small{ - dir = 1 +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, /turf/open/floor/almayer{ - icon_state = "cargo" + icon_state = "dark_sterile" }, /area/almayer/living/pilotbunks) "aKI" = ( @@ -11267,14 +11155,24 @@ pixel_x = 8; pixel_y = -26 }, -/obj/structure/surface/rack, -/turf/open/floor/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, /area/almayer/living/numbertwobunks) "aLt" = ( -/obj/structure/toilet{ - dir = 8 +/obj/structure/surface/rack, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, -/turf/open/floor/almayer, /area/almayer/living/numbertwobunks) "aLB" = ( /turf/closed/wall/almayer, @@ -12046,7 +11944,7 @@ "aPm" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/hallways/aft_hallway) "aPn" = ( @@ -12228,6 +12126,8 @@ "aQs" = ( /obj/structure/surface/table/almayer, /obj/item/tool/extinguisher, +/obj/item/tool/extinguisher, +/obj/item/tool/crowbar, /turf/open/floor/almayer{ dir = 10; icon_state = "orange" @@ -12262,8 +12162,15 @@ }, /area/almayer/medical/upper_medical) "aQA" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "dark_sterile" }, /area/almayer/hull/upper_hull/u_a_s) "aQF" = ( @@ -12391,8 +12298,15 @@ /obj/structure/mirror{ pixel_x = 28 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "dark_sterile" }, /area/almayer/hull/upper_hull/u_a_s) "aRo" = ( @@ -12500,11 +12414,11 @@ /area/almayer/living/captain_mess) "aRF" = ( /obj/structure/machinery/door/airlock/almayer/medical{ + access_modified = 1; dir = 2; name = "Morgue Processing"; req_access_txt = "25"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -12647,10 +12561,6 @@ }, /area/almayer/medical/hydroponics) "aSo" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "SE-out"; - pixel_x = 1 - }, /obj/effect/decal/warning_stripes{ icon_state = "SW-out"; pixel_x = -1 @@ -12658,6 +12568,9 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/hydroponics) "aSq" = ( @@ -13484,17 +13397,29 @@ }, /area/almayer/hallways/aft_hallway) "aWm" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ - icon_state = "test_floor4" + dir = 5; + icon_state = "red" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/lifeboat_pumps/north1) "aWn" = ( -/obj/structure/bed/chair/comfy/teal, +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 6; + icon_state = "red" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/lifeboat_pumps/north1) "aWo" = ( /obj/structure/pipes/unary/outlet_injector, /turf/open/floor/engine, @@ -13516,16 +13441,13 @@ /turf/open/floor/plating, /area/almayer/engineering/lower_engineering) "aWs" = ( -/obj/structure/surface/rack, -/obj/effect/spawner/random/tool, -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 +/obj/structure/machinery/power/apc/almayer{ + dir = 4 }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/north1) +/area/almayer/hull/upper_hull/u_m_s) "aWt" = ( /obj/structure/machinery/vending/coffee, /obj/structure/sign/safety/coffee{ @@ -13537,12 +13459,13 @@ }, /area/almayer/living/bridgebunks) "aWu" = ( -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" +/obj/structure/sign/safety/escapepod{ + pixel_x = 8; + pixel_y = -32 }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 6; + icon_state = "red" }, /area/almayer/lifeboat_pumps/north1) "aWw" = ( @@ -13808,35 +13731,23 @@ /turf/open/floor/plating, /area/almayer/command/corporateliason) "aYq" = ( -/obj/item/tool/warning_cone{ - pixel_x = -12; - pixel_y = 16 - }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 6; + icon_state = "red" }, -/area/almayer/lifeboat_pumps/north1) +/area/almayer/living/starboard_garden) "aYr" = ( -/obj/structure/surface/rack, -/obj/item/frame/rack{ - layer = 3.1; - pixel_y = 19 - }, -/obj/item/reagent_container/food/snacks/cracker, -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 +/obj/structure/bed/chair/office/dark{ + dir = 8 }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/north1) +/area/almayer/hull/upper_hull/u_m_s) "aYs" = ( -/obj/structure/machinery/light{ - dir = 8 - }, /turf/open/floor/almayer{ - icon_state = "plate" + dir = 10; + icon_state = "red" }, /area/almayer/living/starboard_garden) "aYt" = ( @@ -13851,10 +13762,6 @@ }, /area/almayer/hallways/hangar) "aYz" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, /obj/structure/closet/firecloset, /turf/open/floor/almayer{ icon_state = "cargo" @@ -13904,12 +13811,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) -"aYM" = ( -/obj/structure/largecrate/supply/supplies/tables_racks, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "aYO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -14258,6 +14159,9 @@ pixel_x = 8; pixel_y = -32 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, /turf/open/floor/almayer, /area/almayer/hallways/starboard_hallway) "bat" = ( @@ -14597,18 +14501,14 @@ }, /area/almayer/hallways/starboard_hallway) "bbV" = ( -/obj/structure/largecrate/random/secure, -/obj/item/reagent_container/food/drinks/cans/beer{ - pixel_x = 6; - pixel_y = 12 - }, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/structure/machinery/light{ + dir = 8 }, -/area/almayer/lifeboat_pumps/north2) +/turf/open/floor/almayer, +/area/almayer/shipboard/starboard_missiles) "bbX" = ( -/obj/structure/machinery/constructable_frame, /obj/effect/decal/cleanable/blood/oil, +/obj/structure/machinery/constructable_frame, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -14620,11 +14520,11 @@ }, /area/almayer/squads/alpha) "bbZ" = ( -/obj/structure/machinery/constructable_frame, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/structure/bed/chair{ + dir = 1 }, -/area/almayer/lifeboat_pumps/north2) +/turf/open/floor/almayer, +/area/almayer/shipboard/starboard_missiles) "bca" = ( /obj/structure/machinery/cm_vending/gear/smartgun, /obj/structure/sign/safety/hazard{ @@ -15446,6 +15346,13 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) +"bfP" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "bfV" = ( /obj/structure/machinery/landinglight/ds2{ dir = 8 @@ -15863,11 +15770,11 @@ /area/almayer/hallways/aft_hallway) "biu" = ( /obj/structure/machinery/door/airlock/almayer/medical/glass{ + access_modified = 1; dir = 2; name = "\improper Chemistry Laboratory"; req_access_txt = "20"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -15929,17 +15836,19 @@ }, /area/almayer/lifeboat_pumps/north2) "biT" = ( -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 8 +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "red" }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hallways/aft_hallway) +/area/almayer/living/starboard_garden) "biV" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 +/obj/structure/window/framed/almayer, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hallways/aft_hallway) +/turf/open/floor/plating, +/area/almayer/living/starboard_garden) "bja" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/secure_data{ @@ -16031,8 +15940,7 @@ "bjJ" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" + dir = 4 }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/aft_hallway) @@ -16148,11 +16056,11 @@ dir = 2 }, /obj/structure/machinery/door/airlock/almayer/medical/glass{ + access_modified = 1; dir = 2; name = "\improper Nurse Office"; req_access_txt = "20"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -16353,11 +16261,11 @@ /area/almayer/living/offices) "blq" = ( /obj/structure/machinery/door/airlock/almayer/security/glass{ + access_modified = 1; dir = 2; name = "Firing Range"; req_access = null; - req_one_access_txt = "2;4;7;9;21"; - access_modified = 1 + req_one_access_txt = "2;4;7;9;21" }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 1 @@ -16771,6 +16679,12 @@ icon_state = "orange" }, /area/almayer/squads/bravo) +"bny" = ( +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "bnA" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -16868,6 +16782,17 @@ icon_state = "plate" }, /area/almayer/squads/bravo) +"bnZ" = ( +/obj/structure/surface/table/almayer, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22"; + pixel_y = 8 + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "bob" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -16995,12 +16920,7 @@ /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop) "boL" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, +/turf/open/floor/almayer, /area/almayer/living/starboard_garden) "boN" = ( /obj/structure/surface/table/almayer, @@ -17086,11 +17006,11 @@ dir = 2 }, /obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + access_modified = 1; dir = 1; name = "\improper Particle Cannon Systems Room"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -17108,9 +17028,7 @@ /obj/structure/toilet{ dir = 1 }, -/turf/open/floor/almayer{ - icon_state = "sterile" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) "bph" = ( /obj/structure/bed/chair/comfy/orange, @@ -17323,9 +17241,9 @@ }, /area/almayer/hallways/hangar) "bqG" = ( -/obj/structure/largecrate/supply/supplies/flares, /turf/open/floor/almayer{ - icon_state = "plate" + dir = 6; + icon_state = "silver" }, /area/almayer/hull/upper_hull/u_m_p) "bqH" = ( @@ -17573,9 +17491,7 @@ /area/almayer/living/bridgebunks) "brT" = ( /obj/structure/machinery/light, -/turf/open/floor/almayer{ - icon_state = "sterile" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) "brW" = ( /obj/structure/disposalpipe/segment, @@ -17627,11 +17543,11 @@ /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) "bsf" = ( -/obj/structure/largecrate/random, /obj/structure/machinery/camera/autoname/almayer{ dir = 8; name = "ship-grade camera" }, +/obj/structure/largecrate/random, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -18240,10 +18156,7 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) "bvl" = ( -/obj/structure/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/command/corporateliason) "bvr" = ( @@ -18328,6 +18241,10 @@ }, /area/almayer/hallways/starboard_umbilical) "bvU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /obj/structure/machinery/door/airlock/almayer/generic{ dir = 2; name = "\improper Liasion's Bathroom" @@ -18800,18 +18717,13 @@ /obj/structure/bed/chair/office/dark{ dir = 8 }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, /turf/open/floor/almayer, /area/almayer/command/corporateliason) "byq" = ( /obj/structure/machinery/light{ dir = 4 }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/command/corporateliason) "byr" = ( @@ -18992,19 +18904,18 @@ /obj/structure/machinery/door/window/westright, /obj/structure/window/reinforced/tinted/frosted, /obj/item/tool/soap/deluxe, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/command/corporateliason) "bzy" = ( /turf/closed/wall/almayer, /area/almayer/hallways/vehiclehangar) "bzz" = ( -/obj/item/stack/sheet/metal, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/structure/disposalpipe/trunk{ + dir = 4 }, -/area/almayer/lifeboat_pumps/north1) +/obj/structure/machinery/disposal, +/turf/open/floor/almayer, +/area/almayer/shipboard/starboard_missiles) "bzA" = ( /turf/open/floor/almayer{ icon_state = "plate" @@ -19309,7 +19220,7 @@ "bAX" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/hallways/starboard_hallway) "bAY" = ( @@ -19501,14 +19412,11 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/vehiclehangar) "bBC" = ( -/obj/structure/disposalpipe/segment{ +/obj/structure/bed/chair{ dir = 4 }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "green" - }, -/area/almayer/hallways/aft_hallway) +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "bBD" = ( /obj/structure/machinery/firealarm{ pixel_y = 28 @@ -19577,11 +19485,11 @@ dir = 2 }, /obj/structure/machinery/door/airlock/almayer/security{ + access_modified = 1; dir = 2; name = "\improper Security Checkpoint"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -19827,6 +19735,20 @@ icon_state = "plate" }, /area/almayer/shipboard/weapon_room) +"bDe" = ( +/obj/structure/surface/table/almayer, +/obj/item/circuitboard{ + pixel_x = 12; + pixel_y = 7 + }, +/obj/item/tool/crowbar{ + pixel_x = 6; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_p) "bDn" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/closed/wall/almayer, @@ -19862,9 +19784,7 @@ /obj/structure/bed/chair{ dir = 8 }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, +/turf/open/floor/almayer, /area/almayer/living/starboard_garden) "bDF" = ( /obj/structure/machinery/door/poddoor/almayer{ @@ -19887,10 +19807,10 @@ /area/almayer/hallways/hangar) "bDL" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/almayer{ + access_modified = 1; dir = 1; name = "\improper Auxiliary Combat Support Secondary Preparations"; - req_one_access = "19;27;22"; - access_modified = 1 + req_one_access = "19;27;22" }, /turf/open/floor/almayer{ icon_state = "plate" @@ -20802,11 +20722,11 @@ }, /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + access_modified = 1; dir = 1; name = "\improper Particle Cannon Systems Room"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -21076,9 +20996,9 @@ "bIu" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/almayer/generic{ + access_modified = 1; name = "Storage"; - req_one_access = "2;21"; - access_modified = 1 + req_one_access_txt = "19;21" }, /turf/open/floor/almayer{ icon_state = "plate" @@ -21274,10 +21194,10 @@ /area/almayer/engineering/lower_engineering) "bJl" = ( /obj/structure/machinery/door/airlock/almayer/generic{ + access_modified = 1; dir = 1; name = "\improper Auxiliary Support Officers Quarters"; - req_one_access_txt = "37"; - access_modified = 1 + req_one_access_txt = "37" }, /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -21462,11 +21382,11 @@ }, /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{ + access_modified = 1; dir = 1; name = "\improper Particle Cannon Systems Room"; req_access = null; - req_one_access_txt = "7;19"; - access_modified = 1 + req_one_access_txt = "7;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -21940,7 +21860,7 @@ /area/almayer/shipboard/weapon_room) "bLO" = ( /obj/structure/bed/chair{ - dir = 1 + dir = 8 }, /turf/open/floor/grass, /area/almayer/living/starboard_garden) @@ -23993,8 +23913,15 @@ }, /area/almayer/hallways/port_hallway) "bUA" = ( -/obj/docking_port/stationary/escape_pod/north, -/turf/open/floor/plating, +/obj/structure/surface/table/almayer, +/obj/item/tool/screwdriver, +/obj/item/prop/helmetgarb/gunoil{ + pixel_x = -7; + pixel_y = 12 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/hull/upper_hull/u_m_s) "bUE" = ( /turf/open/floor/almayer{ @@ -24184,6 +24111,13 @@ icon_state = "blue" }, /area/almayer/squads/delta) +"bVr" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_p) "bVt" = ( /obj/structure/machinery/door_control{ id = "laddersoutheast"; @@ -24318,15 +24252,16 @@ }, /area/almayer/shipboard/port_point_defense) "bWd" = ( -/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ - dir = 2; - name = "\improper Evacuation Airlock SU-6"; - req_access = null +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/bed/chair{ + dir = 8 }, /turf/open/floor/almayer{ - icon_state = "test_floor4" + icon_state = "plate" }, -/area/almayer/powered) +/area/almayer/living/starboard_garden) "bWe" = ( /turf/open/floor/almayer{ dir = 5; @@ -24334,13 +24269,14 @@ }, /area/almayer/shipboard/port_point_defense) "bWf" = ( -/obj/structure/surface/rack, -/obj/effect/spawner/random/tool, -/obj/effect/spawner/random/tool, +/obj/structure/machinery/light, +/obj/structure/bed/chair{ + dir = 1 + }, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_s) +/area/almayer/living/starboard_garden) "bWh" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ dir = 2; @@ -24351,12 +24287,6 @@ icon_state = "test_floor4" }, /area/almayer/powered) -"bWj" = ( -/obj/structure/largecrate/supply, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "bWn" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -24383,12 +24313,13 @@ }, /area/almayer/shipboard/port_point_defense) "bWq" = ( -/obj/structure/surface/rack, -/obj/effect/spawner/random/toolbox, +/obj/structure/bed/chair{ + dir = 1 + }, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_s) +/area/almayer/living/starboard_garden) "bWr" = ( /obj/structure/machinery/door/airlock/almayer/maint, /turf/open/floor/almayer{ @@ -24444,13 +24375,9 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/living/auxiliary_officer_office) "bWK" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/starboard_garden) +/obj/docking_port/stationary/escape_pod/north, +/turf/open/floor/plating, +/area/almayer/hull/upper_hull/u_m_s) "bWL" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -24981,12 +24908,6 @@ }, /area/almayer/command/cic) "bZa" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - dir = 1; - name = "\improper Flight Crew Quarters"; - req_one_access_txt = "19;22"; - access_modified = 1 - }, /obj/structure/disposalpipe/segment, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -25009,16 +24930,12 @@ }, /area/almayer/lifeboat_pumps/north1) "bZg" = ( -/obj/structure/machinery/door/airlock/almayer/maint{ - dir = 1 - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 9 }, -/area/almayer/living/pilotbunks) +/obj/structure/machinery/light, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "bZi" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/almayer{ @@ -25258,11 +25175,11 @@ "cau" = ( /obj/structure/disposalpipe/segment, /obj/structure/machinery/door/airlock/almayer/security/glass{ + access_modified = 1; dir = 2; name = "Firing Range"; req_access = null; - req_one_access_txt = "2;4;7;9;21"; - access_modified = 1 + req_one_access_txt = "2;4;7;9;21" }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 1 @@ -25637,6 +25554,10 @@ /obj/structure/sign/safety/storage{ pixel_y = 32 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 3 + }, /turf/open/floor/almayer, /area/almayer/hallways/port_hallway) "cbW" = ( @@ -25675,17 +25596,6 @@ icon_state = "red" }, /area/almayer/living/cryo_cells) -"ccc" = ( -/obj/structure/sign/safety/bathunisex{ - pixel_x = 8; - pixel_y = 25 - }, -/obj/structure/sign/safety/bathunisex{ - pixel_x = 8; - pixel_y = -25 - }, -/turf/open/floor/almayer, -/area/almayer/living/pilotbunks) "ccd" = ( /obj/structure/machinery/cm_vending/sorted/cargo_guns/squad_prep, /turf/open/floor/almayer{ @@ -26232,9 +26142,11 @@ }, /area/almayer/hallways/port_umbilical) "ceu" = ( -/obj/item/trash/barcardine, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_s) +/turf/open/floor/almayer{ + dir = 1; + icon_state = "green" + }, +/area/almayer/living/starboard_garden) "cev" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -26259,13 +26171,8 @@ }, /area/almayer/hallways/port_umbilical) "ceC" = ( -/obj/structure/machinery/light, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, +/obj/structure/prop/almayer/ship_memorial, +/turf/open/floor/plating/almayer, /area/almayer/living/starboard_garden) "ceD" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ @@ -26308,12 +26215,22 @@ }, /area/almayer/hallways/repair_bay) "ceZ" = ( -/obj/structure/bed/sofa/south, +/obj/structure/bed/sofa/south/grey/left, /turf/open/floor/almayer{ dir = 9; icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"cfk" = ( +/obj/structure/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/port_missiles) "cfo" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) @@ -26764,17 +26681,15 @@ }, /area/almayer/squads/req) "cit" = ( -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" - }, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/structure/surface/table/almayer, +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 7 }, -/area/almayer/living/starboard_garden) +/obj/item/tool/pen, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "ciu" = ( /obj/structure/platform{ dir = 8 @@ -27681,10 +27596,10 @@ }, /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/almayer/security/reinforced{ + access_modified = 1; name = "\improper Astronavigational Deck"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -27693,10 +27608,10 @@ "cmJ" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/almayer/security/reinforced{ + access_modified = 1; name = "\improper Astronavigational Deck"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -28479,6 +28394,7 @@ pixel_x = 8; pixel_y = -32 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_p) "czM" = ( @@ -28916,6 +28832,7 @@ /obj/structure/machinery/light{ dir = 4 }, +/obj/structure/surface/table/almayer, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) "cIi" = ( @@ -28995,7 +28912,10 @@ /obj/structure/machinery/light{ dir = 1 }, -/turf/open/floor/almayer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/pilotbunks) "cJB" = ( /obj/structure/machinery/vending/coffee, @@ -29438,11 +29358,6 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 }, -/obj/structure/machinery/door/airlock/almayer/medical/glass{ - dir = 2; - name = "\improper Port Viewing Room"; - req_one_access = null - }, /turf/open/floor/almayer{ icon_state = "test_floor4" }, @@ -29537,6 +29452,12 @@ icon_state = "orange" }, /area/almayer/engineering/lower_engineering) +"cWv" = ( +/turf/open/floor/almayer{ + dir = 8; + icon_state = "green" + }, +/area/almayer/living/starboard_garden) "cWy" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/item/reagent_container/food/snacks/packaged_burger, @@ -29748,14 +29669,19 @@ }, /area/almayer/shipboard/brig/surgery) "dav" = ( -/obj/structure/machinery/constructable_frame{ - icon_state = "box_2" +/obj/structure/machinery/door/poddoor/almayer/open{ + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" + }, +/obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; + dir = 2; + req_one_access = list(2,34,30) }, -/obj/effect/decal/cleanable/blood/oil/streak, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hull/upper_hull/u_f_s) "daz" = ( /turf/closed/wall/almayer/white/hull, /area/almayer/command/airoom) @@ -30058,10 +29984,6 @@ pixel_y = 3 }, /obj/item/device/camera, -/obj/effect/decal/warning_stripes{ - icon_state = "SE-out"; - pixel_x = 1 - }, /turf/open/floor/almayer, /area/almayer/command/corporateliason) "dhR" = ( @@ -30077,8 +29999,7 @@ "dhU" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - dir = 5; - icon_state = "green" + icon_state = "cargo" }, /area/almayer/hallways/port_hallway) "dhZ" = ( @@ -30565,6 +30486,7 @@ /area/almayer/hull/lower_hull/l_f_p) "dqN" = ( /obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ icon_state = "green" }, @@ -30747,14 +30669,10 @@ }, /area/almayer/living/briefing) "dux" = ( -/obj/structure/surface/table/almayer, -/obj/item/pizzabox{ - pixel_y = 10 - }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "mono" }, -/area/almayer/hull/upper_hull/u_m_p) +/area/almayer/living/starboard_garden) "duF" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/almayer{ @@ -31134,9 +31052,11 @@ /obj/structure/sign/nosmoking_2{ pixel_x = 32 }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, /turf/open/floor/almayer{ - dir = 1; - icon_state = "red" + icon_state = "test_floor4" }, /area/almayer/lifeboat_pumps/south1) "dCK" = ( @@ -31194,6 +31114,7 @@ /obj/structure/machinery/light/small{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -31306,6 +31227,12 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"dGc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_f_p) "dGl" = ( /obj/effect/step_trigger/teleporter_vector{ name = "Almayer_AresUp"; @@ -31327,7 +31254,10 @@ /obj/structure/pipes/vents/scrubber{ dir = 8 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "blue" + }, /area/almayer/living/pilotbunks) "dGw" = ( /obj/effect/step_trigger/clone_cleaner, @@ -31348,8 +31278,14 @@ /area/almayer/hull/lower_hull/l_a_p) "dGC" = ( /obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, /area/almayer/lifeboat_pumps/south1) "dGD" = ( /obj/structure/closet/secure_closet{ @@ -31373,11 +31309,11 @@ /area/almayer/shipboard/brig/processing) "dGW" = ( /obj/structure/machinery/door/airlock/almayer/security{ + access_modified = 1; dir = 2; name = "\improper Security Checkpoint"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -31567,10 +31503,9 @@ }, /area/almayer/shipboard/sea_office) "dLz" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/backpack/satchel, +/obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/south1) "dLE" = ( @@ -31715,6 +31650,16 @@ icon_state = "dark_sterile" }, /area/almayer/shipboard/brig/surgery) +"dQE" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/janitorialcart, +/obj/item/tool/mop, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_p) "dQH" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -31804,6 +31749,7 @@ /obj/structure/machinery/camera/autoname/almayer{ name = "ship-grade camera" }, +/obj/structure/surface/table/almayer, /turf/open/floor/almayer{ dir = 9; icon_state = "red" @@ -31857,6 +31803,10 @@ pixel_y = 6; serial_number = 12 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -31896,16 +31846,25 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_s) "dUI" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ + name = "\improper Port Viewing Room" + }, /turf/open/floor/almayer{ - dir = 9; - icon_state = "red" + icon_state = "test_floor4" }, -/area/almayer/shipboard/port_missiles) +/area/almayer/hull/upper_hull/u_f_s) "dUS" = ( /turf/open/floor/almayer{ icon_state = "dark_sterile" }, /area/almayer/medical/operating_room_two) +"dUZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "red" + }, +/area/almayer/shipboard/port_missiles) "dVd" = ( /obj/structure/machinery/seed_extractor{ density = 0; @@ -32056,7 +32015,10 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "blue" + }, /area/almayer/living/pilotbunks) "dYh" = ( /obj/structure/machinery/power/apc/almayer{ @@ -32540,6 +32502,9 @@ /area/almayer/hallways/hangar) "ehj" = ( /obj/item/stack/catwalk, +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) "ehx" = ( @@ -32547,6 +32512,14 @@ /obj/effect/landmark/late_join/alpha, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/alpha) +"ehH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/starboard_hallway) "ehR" = ( /obj/structure/window/reinforced{ dir = 4; @@ -32584,7 +32557,7 @@ /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/living/tankerbunks) +/area/almayer/hull/lower_hull/l_f_p) "eim" = ( /obj/structure/pipes/vents/pump{ dir = 1 @@ -32684,7 +32657,7 @@ "ejp" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/hallways/aft_hallway) "ejt" = ( @@ -32732,18 +32705,25 @@ "eky" = ( /turf/open/floor/almayer, /area/almayer/command/lifeboat) -"ekY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"ekO" = ( +/obj/structure/machinery/cryopod{ + pixel_y = 6 }, -/obj/structure/sign/safety/maint{ - pixel_x = 8; - pixel_y = -32 +/obj/structure/sign/safety/cryo{ + pixel_x = -17 }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/hull/upper_hull/u_m_p) +"ekY" = ( +/obj/structure/machinery/door/airlock/almayer/generic/glass{ + name = "\improper Memorial Room" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/starboard_garden) "elf" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -32761,6 +32741,8 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) "elq" = ( @@ -33224,17 +33206,15 @@ }, /area/almayer/command/airoom) "euO" = ( -/obj/structure/window/framed/almayer, -/obj/structure/machinery/door/poddoor/shutters/almayer/open{ - dir = 2; - id = "Warden Office Shutters"; - name = "\improper Privacy Shutters" +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 }, /turf/open/floor/almayer{ - dir = 5; + dir = 10; icon_state = "red" }, -/area/almayer/shipboard/brig/main_office) +/area/almayer/lifeboat_pumps/north1) "euV" = ( /turf/open/floor/almayer/uscm/directional{ dir = 8; @@ -33258,17 +33238,12 @@ /area/almayer/living/basketball) "evg" = ( /obj/structure/surface/table/reinforced/almayer_B, -/obj/item/clipboard{ - pixel_x = -6 - }, -/obj/item/tool/pen/blue{ - pixel_x = -6 +/obj/structure/machinery/computer/emails{ + dir = 1 }, -/obj/item/paper_bin/uscm{ - pixel_x = 8; - pixel_y = 12 +/turf/open/floor/almayer{ + icon_state = "bluefull" }, -/turf/open/floor/almayer, /area/almayer/living/pilotbunks) "evk" = ( /obj/structure/surface/rack, @@ -33716,6 +33691,17 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/port) +"eFM" = ( +/obj/structure/surface/table/almayer, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22"; + pixel_y = 8 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "eFT" = ( /obj/structure/bed/sofa/vert/grey, /obj/structure/bed/sofa/vert/grey{ @@ -33723,6 +33709,14 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) +"eGb" = ( +/obj/structure/machinery/constructable_frame{ + icon_state = "box_2" + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north2) "eGg" = ( /obj/structure/machinery/door/poddoor/railing{ dir = 8; @@ -33949,12 +33943,17 @@ /obj/structure/mirror{ pixel_x = 28 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, /area/almayer/command/corporateliason) "eKM" = ( /obj/structure/surface/rack, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -33992,6 +33991,19 @@ icon_state = "test_floor4" }, /area/almayer/engineering/laundry) +"eMn" = ( +/obj/structure/machinery/light, +/obj/structure/sign/safety/waterhazard{ + pixel_y = -32 + }, +/obj/structure/sign/safety/rewire{ + pixel_x = 14; + pixel_y = -32 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "eMP" = ( /obj/structure/machinery/door/poddoor/almayer/open{ dir = 4; @@ -34069,6 +34081,16 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"eOM" = ( +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + dir = 2; + name = "\improper Evacuation Airlock PU-6"; + req_access = null + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/powered) "eOR" = ( /obj/structure/machinery/light{ dir = 4 @@ -34174,15 +34196,16 @@ /turf/open/floor/almayer, /area/almayer/shipboard/brig/main_office) "eRR" = ( -/obj/structure/surface/rack, -/obj/effect/spawner/random/tool, -/obj/structure/machinery/light{ - dir = 1 +/obj/item/clothing/head/helmet/marine{ + pixel_x = 16; + pixel_y = 6 }, +/obj/item/reagent_container/food/snacks/grown/poppy, +/obj/effect/step_trigger/message/memorial, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/living/starboard_garden) "eSo" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -34216,7 +34239,7 @@ pixel_x = -17; pixel_y = -17 }, -/obj/structure/transmitter/rotary{ +/obj/structure/transmitter/rotary/no_dnd{ name = "Delta Overwatch Telephone"; phone_category = "Command"; phone_id = "Delta Overwatch" @@ -34563,6 +34586,12 @@ icon_state = "red" }, /area/almayer/hull/upper_hull/u_a_p) +"fad" = ( +/obj/effect/step_trigger/clone_cleaner, +/turf/open/floor/almayer{ + icon_state = "green" + }, +/area/almayer/hallways/aft_hallway) "fau" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /obj/structure/disposalpipe/junction{ @@ -35037,10 +35066,10 @@ /area/almayer/living/briefing) "fmf" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/almayer/glass{ + access_modified = 1; dir = 2; name = "\improper Requisitions Break Room"; - req_one_access = "19;21"; - access_modified = 1 + req_one_access_txt = "19;21" }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -35070,7 +35099,9 @@ /obj/structure/bed/chair/comfy{ dir = 8 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "bluecorner" + }, /area/almayer/living/pilotbunks) "fmS" = ( /obj/structure/closet/secure_closet/engineering_electrical, @@ -35101,8 +35132,7 @@ dir = 8 }, /turf/open/floor/almayer{ - dir = 5; - icon_state = "plating" + icon_state = "redfull" }, /area/almayer/medical/upper_medical) "fnC" = ( @@ -35176,6 +35206,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/medical_science) +"foR" = ( +/obj/structure/largecrate/random/case, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_p) "fpd" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -35251,6 +35287,17 @@ /obj/structure/largecrate/random/barrel/red, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_s) +"fqx" = ( +/obj/structure/machinery/light, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "silver" + }, +/area/almayer/hull/upper_hull/u_m_p) "fqO" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 @@ -35342,10 +35389,10 @@ dir = 2 }, /obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + access_modified = 1; name = "\improper Cryogenics Bay"; req_access = null; - req_one_access_txt = "1;3"; - access_modified = 1 + req_one_access_txt = "1;3" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -35376,7 +35423,15 @@ pixel_x = -8; pixel_y = 5 }, -/turf/open/floor/plating/plating_catwalk, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, /area/almayer/shipboard/brig/armory) "fsH" = ( /obj/structure/disposalpipe/segment{ @@ -35388,6 +35443,15 @@ }, /area/almayer/hallways/port_hallway) "fsT" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1; + pixel_y = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, /turf/open/floor/almayer{ dir = 5; icon_state = "plating" @@ -35429,12 +35493,9 @@ }, /area/almayer/hallways/vehiclehangar) "fuz" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/frosted, +/obj/structure/machinery/cm_vending/clothing/pilot_officer, /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "plate" }, /area/almayer/living/pilotbunks) "fuB" = ( @@ -35485,11 +35546,17 @@ }, /area/almayer/living/briefing) "fvu" = ( -/obj/item/tool/crowbar, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_s) +"fvv" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ + name = "\improper Port Viewing Room" + }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "test_floor4" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hull/upper_hull/u_f_p) "fvB" = ( /obj/structure/closet/secure_closet/staff_officer/armory/m4a1, /turf/open/floor/almayer{ @@ -35521,25 +35588,23 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/port_point_defense) "fwD" = ( -/obj/structure/surface/table/almayer, -/obj/item/trash/plate{ +/obj/item/reagent_container/food/snacks/grown/poppy{ pixel_x = 4; - pixel_y = 9 + pixel_y = 4 }, +/obj/effect/step_trigger/message/memorial, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/living/starboard_garden) "fwF" = ( -/obj/structure/largecrate/random/case/double, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 8; - name = "ship-grade camera" +/obj/structure/machinery/light/small{ + dir = 4 }, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_f_p) +/area/almayer/hull/upper_hull/u_f_s) "fwY" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -35785,10 +35850,7 @@ /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = -25 }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "plating" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/armory) "fDG" = ( /obj/structure/machinery/vending/coffee, @@ -35856,9 +35918,9 @@ /area/almayer/command/cichallway) "fEo" = ( /obj/structure/machinery/door/airlock/almayer/generic{ + access_modified = 1; name = "Kitchen"; - req_one_access_txt = "30;19"; - access_modified = 1 + req_one_access_txt = "30;19" }, /obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ @@ -36094,9 +36156,9 @@ /area/almayer/squads/bravo) "fIX" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/almayer{ + access_modified = 1; name = "\improper Requisitions Auxiliary Storage Room"; - req_one_access = "19;21"; - access_modified = 1 + req_one_access = "19;21" }, /turf/open/floor/almayer{ icon_state = "plate" @@ -36497,6 +36559,7 @@ /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -36536,7 +36599,9 @@ /obj/structure/sign/safety/storage{ pixel_x = -17 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "red" + }, /area/almayer/lifeboat_pumps/north1) "fSF" = ( /obj/structure/sink{ @@ -36896,9 +36961,7 @@ /obj/structure/toilet{ dir = 8 }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/command/corporateliason) "gbX" = ( /obj/structure/disposalpipe/segment{ @@ -36910,6 +36973,15 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/processing) +"gcc" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_f_p) "gcK" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -36925,10 +36997,10 @@ /area/almayer/hull/lower_hull/l_a_s) "gcN" = ( /obj/structure/machinery/door/airlock/almayer/command{ + access_modified = 1; name = "\improper Senior Enlisted Advisor's Office"; req_access = null; - req_access_txt = "19;29"; - access_modified = 1 + req_access_txt = "19;29" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -37175,6 +37247,10 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/port_hallway) +"ghW" = ( +/obj/effect/landmark/start/liaison, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_p) "ghX" = ( /obj/structure/window/reinforced/tinted{ pixel_y = -8 @@ -37323,11 +37399,11 @@ "gjL" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/crew/alt, -/obj/structure/transmitter/rotary{ +/obj/structure/transmitter/rotary/no_dnd{ name = "Brig Cells Telephone"; phone_category = "Almayer"; phone_id = "Brig Cells"; - pixel_x = 15 + pixel_x = 15; }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/processing) @@ -37462,10 +37538,10 @@ /area/almayer/lifeboat_pumps/north1) "gol" = ( /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; dir = 1; req_one_access = null; - req_one_access_txt = "7;19"; - access_modified = 1 + req_one_access_txt = "7;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -38335,7 +38411,7 @@ pixel_x = -17; pixel_y = 16 }, -/obj/structure/transmitter/rotary{ +/obj/structure/transmitter/rotary/no_dnd{ name = "Alpha Overwatch Telephone"; phone_category = "Command"; phone_id = "Alpha Overwatch" @@ -38569,9 +38645,9 @@ /area/almayer/hull/lower_hull/l_f_p) "gMA" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 8; - req_one_access = list(2,34,30); - access_modified = 1 + req_one_access = list(2,34,30) }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -39156,8 +39232,8 @@ }, /area/almayer/command/cichallway) "haM" = ( -/obj/structure/machinery/constructable_frame, /obj/effect/decal/cleanable/blood/oil, +/obj/structure/machinery/constructable_frame, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -39367,6 +39443,12 @@ icon_state = "plate" }, /area/almayer/engineering/engine_core) +"heH" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/lifeboat_pumps/north1) "heQ" = ( /obj/structure/bed/chair, /obj/structure/extinguisher_cabinet{ @@ -39661,6 +39743,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/port_point_defense) +"hkE" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hallways/port_hallway) "hkG" = ( /obj/structure/sign/safety/ammunition{ pixel_y = -32 @@ -39799,6 +39887,20 @@ icon_state = "sterile_green" }, /area/almayer/medical/hydroponics) +"hnI" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ + access_modified = 1; + name = "\improper Flight Crew Quarters"; + req_access_txt = null; + req_one_access_txt = "19;22" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/pilotbunks) "hnV" = ( /obj/structure/machinery/light, /turf/open/floor/almayer, @@ -40163,6 +40265,16 @@ icon_state = "plate" }, /area/almayer/squads/charlie_delta_shared) +"hyt" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "green" + }, +/area/almayer/hallways/starboard_hallway) "hyw" = ( /obj/effect/decal/warning_stripes{ icon_state = "NW-out"; @@ -40437,6 +40549,10 @@ icon_state = "plate" }, /area/almayer/medical/lower_medical_medbay) +"hDv" = ( +/obj/effect/landmark/start/reporter, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_p) "hDw" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/emails{ @@ -40511,10 +40627,10 @@ /area/almayer/medical/medical_science) "hFF" = ( /obj/structure/machinery/door/airlock/almayer/medical{ + access_modified = 1; name = "Autopsy"; req_access_txt = "25"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ @@ -40636,9 +40752,9 @@ name = "\improper Privacy Shutters" }, /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; req_access_txt = "200"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -41054,11 +41170,11 @@ /area/almayer/living/grunt_rnr) "hSI" = ( /obj/structure/machinery/door/airlock/almayer/medical{ + access_modified = 1; dir = 2; name = "Morgue"; req_access_txt = "25"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ @@ -41266,6 +41382,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/briefing) +"hWB" = ( +/obj/structure/sign/safety/escapepod{ + pixel_x = 8; + pixel_y = 32 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "hWJ" = ( /obj/structure/largecrate/random/case/small, /turf/open/floor/almayer{ @@ -41312,6 +41438,15 @@ }, /turf/open/floor/almayer, /area/almayer/squads/alpha_bravo_shared) +"hXV" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "hXY" = ( /turf/open/floor/almayer{ dir = 4; @@ -41716,21 +41851,33 @@ /area/almayer/squads/bravo) "iid" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 2; req_one_access = null; - req_one_access_txt = "19;34;30"; - access_modified = 1 + req_one_access_txt = "19;34;30" }, /turf/open/floor/almayer{ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_m_p) "iit" = ( -/obj/effect/landmark/ert_spawns/distress_cryo, -/obj/effect/landmark/late_join, -/obj/effect/landmark/start/reporter, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/living/cryo_cells) +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/medical/hydroponics) "iiz" = ( /obj/structure/surface/rack, /obj/item/reagent_container/food/drinks/bottle/sake{ @@ -41889,6 +42036,9 @@ /area/almayer/hallways/hangar) "ilJ" = ( /obj/structure/bed/chair, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) "ilZ" = ( @@ -41916,11 +42066,14 @@ /area/almayer/living/offices/flight) "ina" = ( /obj/structure/surface/table/almayer, -/obj/effect/spawner/random/tool, +/obj/structure/machinery/computer/emails{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hull/upper_hull/u_m_s) "ins" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -42022,11 +42175,11 @@ }, /area/almayer/squads/alpha_bravo_shared) "ipK" = ( -/obj/structure/largecrate/random/case/small, +/obj/effect/step_trigger/message/memorial, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_s) +/area/almayer/living/starboard_garden) "ipQ" = ( /obj/structure/surface/rack, /obj/item/storage/fancy/vials/empty, @@ -42074,9 +42227,9 @@ /area/almayer/squads/req) "iqp" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; req_one_access = null; - req_one_access_txt = "37"; - access_modified = 1 + req_one_access_txt = "37" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -43150,6 +43303,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/command/lifeboat) +"iPH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "iPS" = ( /obj/structure/machinery/cryopod/right, /turf/open/floor/almayer{ @@ -43228,9 +43391,9 @@ /area/almayer/hull/lower_hull/l_f_p) "iQL" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 2; - req_one_access = list(2,34,30); - access_modified = 1 + req_one_access = list(2,34,30) }, /obj/structure/prop/invuln/lattice_prop{ dir = 1; @@ -43425,12 +43588,14 @@ }, /area/almayer/hull/lower_hull/l_f_p) "iVY" = ( -/obj/effect/decal/hefa_cult_decals/d32, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "orange" +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 8 }, -/area/almayer/engineering/upper_engineering/starboard) +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/cic_hallway) "iVZ" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/folder/black, @@ -43575,12 +43740,14 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_p) "iYr" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/structure/machinery/light{ + dir = 4 }, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/south1) +/turf/open/floor/almayer{ + dir = 4; + icon_state = "green" + }, +/area/almayer/living/starboard_garden) "iYt" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -43900,6 +44067,11 @@ dir = 8; name = "ship-grade camera" }, +/obj/structure/surface/table/almayer, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22"; + pixel_y = 8 + }, /turf/open/floor/almayer{ dir = 5; icon_state = "red" @@ -44146,11 +44318,21 @@ icon_state = "cargo" }, /area/almayer/living/bridgebunks) +"jhY" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silver" + }, +/area/almayer/hull/upper_hull/u_m_p) "jip" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ + access_modified = 1; name = "\improper Main Kitchen"; - req_one_access_txt = "30;19"; - access_modified = 1 + req_one_access_txt = "30;19" }, /turf/open/floor/prison{ icon_state = "kitchen" @@ -44441,6 +44623,19 @@ icon_state = "test_floor4" }, /area/almayer/hallways/aft_hallway) +"jnA" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/almayer/shipboard/brig/armory) "jnD" = ( /turf/open/floor/almayer{ dir = 1; @@ -44564,6 +44759,7 @@ icon_state = "NW-out"; pixel_y = 1 }, +/obj/structure/bed/chair/comfy, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -44596,6 +44792,15 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) +"jsP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "jtj" = ( /obj/structure/machinery/status_display{ pixel_y = 30 @@ -44706,14 +44911,11 @@ }, /area/almayer/hull/upper_hull/u_a_p) "jvJ" = ( -/obj/structure/machinery/light{ - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - dir = 4; - icon_state = "red" + icon_state = "plate" }, -/area/almayer/shipboard/starboard_missiles) +/area/almayer/hull/upper_hull/u_f_s) "jvX" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -45253,11 +45455,14 @@ }, /area/almayer/hull/lower_hull/l_a_s) "jMm" = ( -/obj/effect/spawner/random/tool, +/obj/structure/closet/secure_closet/personal/cabinet{ + req_access = null + }, +/obj/item/clothing/mask/rebreather/scarf, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/south2) +/area/almayer/living/pilotbunks) "jMr" = ( /obj/structure/surface/table/almayer, /obj/item/storage/donut_box{ @@ -45762,6 +45967,15 @@ icon_state = "plate" }, /area/almayer/living/offices) +"jWH" = ( +/obj/structure/machinery/power/apc/almayer/hardened{ + cell_type = /obj/item/cell/hyper; + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "jWU" = ( /obj/effect/step_trigger/clone_cleaner, /obj/structure/blocker/forcefield/multitile_vehicles, @@ -45910,8 +46124,7 @@ "jZY" = ( /obj/structure/closet/l3closet/virology, /turf/open/floor/almayer{ - dir = 5; - icon_state = "plating" + icon_state = "redfull" }, /area/almayer/medical/upper_medical) "kaj" = ( @@ -45919,9 +46132,11 @@ /obj/effect/decal/warning_stripes{ icon_state = "SW-out" }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, /turf/open/floor/almayer{ - dir = 9; - icon_state = "green" + icon_state = "test_floor4" }, /area/almayer/hallways/aft_hallway) "kan" = ( @@ -46383,6 +46598,14 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south2) +"kkE" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/port_hallway) "kkO" = ( /obj/structure/stairs/perspective{ dir = 8; @@ -46778,7 +47001,8 @@ /area/almayer/shipboard/brig/evidence_storage) "ktn" = ( /obj/effect/decal/warning_stripes{ - icon_state = "N" + icon_state = "N"; + pixel_y = 2 }, /obj/structure/closet/secure_closet/guncabinet/red, /obj/item/weapon/gun/rifle/m4ra, @@ -46822,6 +47046,12 @@ icon_state = "greencorner" }, /area/almayer/living/grunt_rnr) +"kuk" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "kuu" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /obj/structure/disposalpipe/segment{ @@ -46988,12 +47218,13 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/south1) "kyY" = ( -/obj/structure/largecrate/random/case/small, -/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ - pixel_y = -25 +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 6; + icon_state = "red" }, /area/almayer/lifeboat_pumps/north1) "kyZ" = ( @@ -47120,6 +47351,13 @@ icon_state = "test_floor4" }, /area/almayer/command/airoom) +"kBK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/starboard_hallway) "kBP" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -47181,6 +47419,7 @@ /area/almayer/hull/lower_hull/l_f_p) "kDb" = ( /obj/structure/surface/rack, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) "kDi" = ( @@ -47223,15 +47462,6 @@ icon_state = "dark_sterile" }, /area/almayer/medical/containment) -"kDt" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "red" - }, -/area/almayer/lifeboat_pumps/south1) "kDA" = ( /obj/structure/pipes/vents/scrubber, /turf/open/floor/almayer{ @@ -47265,11 +47495,15 @@ }, /area/almayer/medical/morgue) "kFe" = ( -/obj/structure/machinery/constructable_frame, +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/south2) +/area/almayer/living/pilotbunks) "kFk" = ( /obj/structure/closet/secure_closet/commander, /turf/open/floor/wood/ship, @@ -47347,11 +47581,19 @@ icon_state = "emerald" }, /area/almayer/squads/charlie) +"kGI" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/hallways/aft_hallway) "kGL" = ( /obj/effect/step_trigger/clone_cleaner, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, /turf/open/floor/almayer{ - dir = 1; - icon_state = "green" + icon_state = "test_floor4" }, /area/almayer/hallways/aft_hallway) "kGQ" = ( @@ -47487,6 +47729,14 @@ /obj/structure/bed/chair/comfy/orange, /turf/open/floor/almayer, /area/almayer/shipboard/brig/main_office) +"kJL" = ( +/obj/structure/machinery/constructable_frame{ + icon_state = "box_2" + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "kJV" = ( /obj/structure/machinery/light, /turf/open/floor/almayer{ @@ -47709,6 +47959,10 @@ /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) "kOv" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "cargo_arrow" }, @@ -47718,7 +47972,13 @@ icon_state = "N"; pixel_y = 1 }, -/obj/structure/bed/chair/comfy, +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/clipboard{ + pixel_x = -6 + }, +/obj/item/tool/pen/blue{ + pixel_x = -6 + }, /turf/open/floor/almayer{ icon_state = "bluefull" }, @@ -47984,12 +48244,14 @@ /turf/open/floor/almayer, /area/almayer/hallways/hangar) "kUh" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ + access_modified = 1; + dir = 1; name = "\improper Flight Crew Quarters"; - req_one_access_txt = "19;22"; - access_modified = 1 + req_access_txt = null; + req_one_access_txt = "19;22" }, -/obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ icon_state = "test_floor4" }, @@ -48023,6 +48285,13 @@ icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/port) +"kUQ" = ( +/obj/effect/decal/cleanable/blood/oil/streak, +/obj/structure/machinery/constructable_frame, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "kUV" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -48074,11 +48343,11 @@ }, /area/almayer/command/cichallway) "kWT" = ( -/obj/structure/machinery/power/apc/almayer/hardened, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 9; + icon_state = "blue" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/living/pilotbunks) "kWY" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -49033,7 +49302,9 @@ }, /area/almayer/living/port_emb) "lqZ" = ( -/obj/structure/machinery/floodlight/landing, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -49079,6 +49350,11 @@ icon_state = "plate" }, /area/almayer/living/port_emb) +"lrF" = ( +/obj/structure/machinery/light, +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "lrT" = ( /obj/structure/bed/chair, /turf/open/floor/almayer, @@ -49182,6 +49458,13 @@ icon_state = "emerald" }, /area/almayer/squads/charlie) +"ltK" = ( +/obj/structure/window/framed/almayer, +/obj/structure/curtain/open/shower{ + name = "hypersleep curtain" + }, +/turf/open/floor/plating, +/area/almayer/hull/upper_hull/u_m_p) "ltU" = ( /obj/structure/filingcabinet, /turf/open/floor/almayer{ @@ -49313,13 +49596,11 @@ }, /area/almayer/command/cic) "lvA" = ( -/obj/structure/machinery/power/apc/almayer/hardened{ - dir = 1 - }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 1; + icon_state = "blue" }, -/area/almayer/lifeboat_pumps/north1) +/area/almayer/living/pilotbunks) "lvZ" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/poddoor/almayer/locked{ @@ -49331,10 +49612,10 @@ /area/almayer/shipboard/brig/perma) "lwi" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 1; req_one_access = null; - req_one_access_txt = "2;7"; - access_modified = 1 + req_one_access_txt = "2;7" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -49422,6 +49703,12 @@ icon_state = "plate" }, /area/almayer/living/auxiliary_officer_office) +"lxT" = ( +/obj/structure/machinery/constructable_frame, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south2) "lxW" = ( /obj/structure/sign/prop2{ pixel_y = 29 @@ -49470,6 +49757,13 @@ icon_state = "plate" }, /area/almayer/living/auxiliary_officer_office) +"lza" = ( +/obj/structure/bed/sofa/vert/grey, +/obj/structure/bed/sofa/vert/grey/top{ + pixel_y = 11 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "lzj" = ( /obj/structure/sign/safety/storage{ pixel_x = 8; @@ -49711,18 +50005,23 @@ }, /area/almayer/squads/req) "lDN" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 }, -/obj/structure/sign/safety/coffee{ - pixel_y = 32 +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 }, -/obj/structure/sign/safety/east{ - pixel_x = 15; - pixel_y = 32 +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 1 }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_p) +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/medical/hydroponics) "lDV" = ( /obj/effect/landmark/start/marine/medic/bravo, /obj/effect/landmark/late_join/bravo, @@ -50194,7 +50493,7 @@ }, /turf/open/floor/almayer{ dir = 4; - icon_state = "redcorner" + icon_state = "red" }, /area/almayer/shipboard/brig/main_office) "lNw" = ( @@ -50238,6 +50537,10 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -50634,16 +50937,15 @@ }, /area/almayer/shipboard/brig/general_equipment) "maq" = ( -/obj/structure/machinery/cryopod/right{ - pixel_y = 6 - }, /obj/structure/sign/safety/cryo{ pixel_x = 7; pixel_y = -26 }, -/turf/open/floor/almayer{ - icon_state = "cargo" +/obj/structure/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, +/turf/open/floor/almayer, /area/almayer/command/corporateliason) "maw" = ( /obj/structure/disposalpipe/segment, @@ -50854,6 +51156,10 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"mgy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, +/area/almayer/shipboard/brig/cic_hallway) "mgF" = ( /obj/structure/window/reinforced{ dir = 4; @@ -51034,6 +51340,11 @@ pixel_x = -25; req_access_txt = "200" }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 2 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -51210,14 +51521,11 @@ /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) "mov" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/machinery/light/small, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/structure/bed/chair{ + dir = 1 }, -/area/almayer/hull/upper_hull/u_m_p) +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "moB" = ( /turf/closed/wall/almayer, /area/almayer/shipboard/brig/cells) @@ -51323,6 +51631,13 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) +"mru" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/port_hallway) "mrD" = ( /obj/structure/machinery/light{ dir = 1 @@ -51434,6 +51749,19 @@ icon_state = "red" }, /area/almayer/command/lifeboat) +"mtE" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/sign/safety/east{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/sign/safety/coffee{ + pixel_y = 32 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_p) "mtM" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -51464,6 +51792,13 @@ icon_state = "plate" }, /area/almayer/living/gym) +"muq" = ( +/obj/structure/bed/sofa/vert/grey/bot, +/obj/structure/bed/sofa/vert/grey{ + pixel_y = 11 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/north1) "mux" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -51652,6 +51987,10 @@ /obj/structure/machinery/light, /turf/open/floor/almayer, /area/almayer/living/offices) +"mzF" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/lifeboat_pumps/south2) "mzO" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -51729,6 +52068,18 @@ icon_state = "bluefull" }, /area/almayer/squads/charlie_delta_shared) +"mBe" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/pilotbunks) "mBk" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -51744,10 +52095,10 @@ dir = 4 }, /obj/structure/machinery/door/airlock/almayer/security/reinforced{ + access_modified = 1; name = "\improper Astronavigational Deck"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -51763,6 +52114,7 @@ dir = 4; name = "ship-grade camera" }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_p) "mBJ" = ( @@ -51957,12 +52309,11 @@ /area/almayer/living/gym) "mHD" = ( /obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 + icon_state = "S" }, /obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 + icon_state = "N"; + pixel_y = 1 }, /turf/open/floor/almayer{ icon_state = "mono" @@ -51975,8 +52326,11 @@ }, /area/almayer/command/airoom) "mHO" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/machinery/light, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, /area/almayer/living/pilotbunks) "mHR" = ( /obj/structure/sign/safety/hvac_old{ @@ -52066,11 +52420,10 @@ /turf/open/floor/almayer/uscm/directional, /area/almayer/command/cic) "mJL" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/turf/open/floor/almayer{ + dir = 5; + icon_state = "blue" }, -/turf/closed/wall/almayer, /area/almayer/living/pilotbunks) "mJP" = ( /obj/structure/machinery/cm_vending/gear/tl{ @@ -52259,7 +52612,9 @@ }, /area/almayer/hallways/stern_hallway) "mMu" = ( -/obj/structure/machinery/floodlight/landing, +/obj/structure/machinery/floodlight/landing{ + name = "bolted floodlight" + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -52335,11 +52690,17 @@ }, /area/almayer/hull/lower_hull/l_m_s) "mOb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/machinery/camera/autoname/almayer{ + dir = 8; + name = "ship-grade camera" }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_p) +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/starboard_garden) "mOg" = ( /obj/structure/sign/safety/maint{ pixel_x = 32 @@ -52534,9 +52895,9 @@ name = "\improper Privacy Shutters" }, /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; req_one_access = null; - req_one_access_txt = "19;30"; - access_modified = 1 + req_one_access_txt = "19;30" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -52585,6 +52946,12 @@ icon_state = "red" }, /area/almayer/shipboard/navigation) +"mTn" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hallways/starboard_hallway) "mTp" = ( /obj/structure/window/reinforced{ dir = 4; @@ -52810,15 +53177,6 @@ icon_state = "blue" }, /area/almayer/hallways/port_hallway) -"mYx" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_y = 8 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south1) "mYY" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out" @@ -53034,9 +53392,9 @@ /area/almayer/shipboard/port_missiles) "nec" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; req_access_txt = "200"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -53244,11 +53602,11 @@ /area/almayer/lifeboat_pumps/south1) "nim" = ( /obj/structure/machinery/door/airlock/almayer/engineering{ + access_modified = 1; dir = 2; name = "\improper Chief Engineer's Office"; req_one_access = null; - req_one_access_txt = "1;6"; - access_modified = 1 + req_one_access_txt = "1;6" }, /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/poddoor/shutters/almayer/open{ @@ -53314,11 +53672,16 @@ icon_state = "red" }, /area/almayer/squads/alpha) +"njy" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/hallways/port_hallway) "njD" = ( -/obj/structure/surface/table/almayer, -/obj/item/clothing/suit/storage/hazardvest, +/obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/south1) "njJ" = ( @@ -53373,6 +53736,8 @@ /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 }, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails, /turf/open/floor/almayer{ dir = 1; icon_state = "red" @@ -53602,6 +53967,17 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"nqG" = ( +/obj/structure/machinery/light, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "nqU" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_p) @@ -53792,11 +54168,9 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/structure/sign/safety/maint{ - pixel_x = 32 - }, /turf/open/floor/almayer{ - icon_state = "plate" + dir = 5; + icon_state = "green" }, /area/almayer/living/starboard_garden) "nun" = ( @@ -53833,15 +54207,11 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/alpha) "nuY" = ( -/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ - dir = 2; - name = "\improper Evacuation Airlock PU-6"; - req_access = null - }, +/obj/structure/closet, /turf/open/floor/almayer{ - icon_state = "test_floor4" + icon_state = "plate" }, -/area/almayer/powered) +/area/almayer/hull/upper_hull/u_m_s) "nvM" = ( /obj/structure/window/framed/almayer/white, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -53898,6 +54268,12 @@ /obj/item/tool/lighter/zippo/gold, /turf/open/floor/carpet, /area/almayer/living/commandbunks) +"nwx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/shipboard/port_missiles) "nwz" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -53967,7 +54343,9 @@ id = "Warden Office Shutters"; name = "\improper Privacy Shutters" }, -/turf/open/floor/plating, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/almayer/shipboard/brig/main_office) "nxK" = ( /obj/structure/sign/safety/high_voltage{ @@ -54124,12 +54502,10 @@ }, /area/almayer/living/briefing) "nBE" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, /area/almayer/living/pilotbunks) "nBW" = ( /obj/structure/sign/safety/maint{ @@ -54667,9 +55043,11 @@ }, /area/almayer/shipboard/brig/cic_hallway) "nNA" = ( -/obj/structure/largecrate/random, +/obj/structure/machinery/cryopod{ + pixel_y = 6 + }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/hull/upper_hull/u_m_p) "nNH" = ( @@ -54829,15 +55207,6 @@ icon_state = "plate" }, /area/almayer/squads/req) -"nPX" = ( -/obj/structure/sign/safety/rewire{ - pixel_x = 8; - pixel_y = 32 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north2) "nQv" = ( /obj/structure/machinery/power/apc/almayer{ dir = 4 @@ -54926,6 +55295,13 @@ }, /turf/open/floor/almayer, /area/almayer/command/computerlab) +"nTH" = ( +/obj/structure/sign/safety/storage{ + pixel_x = 8; + pixel_y = 32 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "nTZ" = ( /turf/open/floor/almayer{ dir = 5; @@ -54959,6 +55335,14 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) +"nUn" = ( +/obj/structure/surface/table/almayer, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22"; + pixel_y = 8 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "nUv" = ( /obj/structure/machinery/light{ dir = 1 @@ -55042,6 +55426,14 @@ icon_state = "test_floor4" }, /area/almayer/engineering/upper_engineering/starboard) +"nWc" = ( +/obj/structure/machinery/door/airlock/almayer/generic/glass{ + name = "\improper Passenger Cryogenics Bay" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_m_p) "nWN" = ( /obj/structure/surface/table/almayer, /turf/open/floor/wood/ship, @@ -55062,6 +55454,15 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/cells) +"nXF" = ( +/obj/structure/bed/sofa/south/white/right{ + pixel_y = 16 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "silver" + }, +/area/almayer/hull/upper_hull/u_m_p) "nXP" = ( /turf/closed/wall/almayer/outer, /area/almayer/hull/lower_hull/l_f_s) @@ -55112,6 +55513,13 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) +"nYv" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/aft_hallway) "nYD" = ( /obj/structure/closet/secure_closet/medical2, /turf/open/floor/almayer{ @@ -55171,6 +55579,10 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"oaK" = ( +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "oaW" = ( /obj/structure/machinery/cryopod/right, /turf/open/floor/almayer{ @@ -55333,6 +55745,16 @@ icon_state = "dark_sterile" }, /area/almayer/engineering/laundry) +"odM" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/cic_hallway) "odN" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -55453,11 +55875,8 @@ }, /area/almayer/shipboard/weapon_room) "ohB" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_y = 8 - }, /obj/structure/machinery/light, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -55917,7 +56336,9 @@ name = "General Listening Channel"; pixel_y = 28 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/pilotbunks) "oqA" = ( /obj/structure/machinery/door/poddoor/shutters/almayer/uniform_vendors, @@ -56273,10 +56694,10 @@ dir = 4 }, /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; req_access = null; req_one_access = null; - req_one_access_txt = "19;29"; - access_modified = 1 + req_one_access_txt = "19;29" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -56324,6 +56745,13 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_p) +"oyy" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/port_hallway) "oyE" = ( /obj/effect/landmark/start/intel, /obj/structure/sign/poster{ @@ -56660,26 +57088,21 @@ }, /area/almayer/living/synthcloset) "oGy" = ( -/obj/structure/disposalpipe/segment{ +/obj/structure/machinery/camera/autoname/almayer{ dir = 1; - icon_state = "pipe-c" - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_p) -"oGC" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_y = 8 + name = "ship-grade camera" }, -/obj/structure/machinery/light{ +/obj/structure/bed/chair{ dir = 1 }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/living/starboard_garden) +"oGC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/north1) "oGP" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -56742,6 +57165,7 @@ "oIm" = ( /obj/structure/prop/server_equipment/broken, /turf/open/floor/almayer{ + dir = 1; icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) @@ -57098,6 +57522,7 @@ /area/almayer/hull/lower_hull/l_f_s) "oQo" = ( /obj/item/stool, +/obj/effect/landmark/yautja_teleport, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -57341,9 +57766,11 @@ }, /area/almayer/shipboard/brig/cic_hallway) "oWz" = ( -/obj/item/stool, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/south1) +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/starboard_garden) "oWI" = ( /obj/structure/machinery/cryopod/right{ pixel_y = 6 @@ -57357,10 +57784,10 @@ /area/almayer/shipboard/brig/cryo) "oWX" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ + access_modified = 1; dir = 1; name = "\improper Kitchen Hydroponics"; - req_one_access_txt = "30;19"; - access_modified = 1 + req_one_access_txt = "30;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -57371,6 +57798,14 @@ /obj/effect/landmark/late_join/charlie, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) +"oXd" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, +/turf/open/floor/almayer{ + icon_state = "blue" + }, +/area/almayer/hallways/aft_hallway) "oXp" = ( /obj/effect/decal/cleanable/ash, /turf/open/floor/wood/ship, @@ -57728,15 +58163,6 @@ icon_state = "test_floor4" }, /area/almayer/command/airoom) -"pgo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/lifeboat_pumps/south1) "pgD" = ( /turf/closed/wall/almayer, /area/almayer/lifeboat_pumps/south1) @@ -57899,11 +58325,11 @@ dir = 4 }, /obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + access_modified = 1; dir = 2; name = "Brig"; req_access = null; - req_one_access_txt = "1;3"; - access_modified = 1 + req_one_access_txt = "1;3" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -57918,15 +58344,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) -"pmn" = ( -/obj/structure/sign/safety/storage{ - pixel_x = 8; - pixel_y = 32 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "pmq" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -58017,11 +58434,9 @@ /turf/open/floor/almayer, /area/almayer/living/auxiliary_officer_office) "pqc" = ( -/obj/structure/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/turf/open/floor/almayer{ + icon_state = "mono" }, -/turf/open/floor/almayer, /area/almayer/living/pilotbunks) "pqi" = ( /obj/item/stack/cable_coil, @@ -58307,13 +58722,6 @@ icon_state = "redcorner" }, /area/almayer/shipboard/brig/processing) -"pwG" = ( -/obj/structure/machinery/light, -/turf/open/floor/almayer{ - dir = 6; - icon_state = "red" - }, -/area/almayer/lifeboat_pumps/south1) "pwK" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -58466,14 +58874,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) -"pzy" = ( -/obj/structure/sign/safety/maint{ - pixel_x = 32 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north1) "pzG" = ( /obj/docking_port/stationary/emergency_response/port1, /turf/open/floor/almayer{ @@ -58575,14 +58975,14 @@ }, /area/almayer/engineering/upper_engineering/starboard) "pDm" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, +/obj/structure/surface/rack, +/obj/item/roller, +/obj/item/roller, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_p) +/area/almayer/hull/upper_hull/u_m_s) "pDo" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -58678,17 +59078,11 @@ }, /area/almayer/medical/containment/cell) "pEY" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_y = 8 - }, -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_x = -16; - pixel_y = 8 +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "test_floor4" }, /area/almayer/lifeboat_pumps/south1) "pFa" = ( @@ -58939,11 +59333,11 @@ "pJW" = ( /obj/structure/disposalpipe/segment, /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 1; req_access = null; req_one_access = null; - req_one_access_txt = "3;22;19"; - access_modified = 1 + req_one_access_txt = "3;22;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -58962,9 +59356,9 @@ }, /area/almayer/medical/lower_medical_medbay) "pLv" = ( -/obj/structure/device/broken_moog, /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/almayer{ + dir = 1; icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) @@ -58983,15 +59377,11 @@ }, /area/almayer/medical/containment/cell) "pLW" = ( -/obj/structure/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - dir = 5; - icon_state = "red" + icon_state = "cargo" }, -/area/almayer/shipboard/port_missiles) +/area/almayer/living/pilotbunks) "pLZ" = ( /obj/effect/landmark/crap_item, /turf/open/floor/almayer, @@ -59104,8 +59494,13 @@ /area/almayer/hull/lower_hull/l_m_s) "pOD" = ( /obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/open/floor/almayer, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, /area/almayer/living/pilotbunks) "pON" = ( /turf/open/floor/almayer/uscm/directional{ @@ -59152,6 +59547,12 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) +"pPF" = ( +/obj/structure/machinery/power/apc/almayer/hardened, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south2) "pPM" = ( /obj/structure/surface/rack, /turf/open/floor/almayer{ @@ -59160,6 +59561,7 @@ }, /area/almayer/command/securestorage) "pPN" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ dir = 4; icon_state = "red" @@ -59222,9 +59624,8 @@ }, /area/almayer/medical/medical_science) "pQV" = ( -/obj/structure/machinery/vending/cola, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "blue" }, /area/almayer/living/pilotbunks) "pQY" = ( @@ -59330,6 +59731,12 @@ icon_state = "mono" }, /area/almayer/command/computerlab) +"pUe" = ( +/obj/structure/machinery/power/apc/almayer/hardened, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "pUf" = ( /obj/structure/bed/chair{ dir = 4 @@ -59532,7 +59939,9 @@ /area/almayer/shipboard/brig/main_office) "pWN" = ( /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "blue" + }, /area/almayer/living/pilotbunks) "pXj" = ( /obj/structure/closet/radiation, @@ -59773,13 +60182,11 @@ }, /area/almayer/living/briefing) "qbO" = ( -/obj/structure/machinery/power/apc/almayer/hardened{ - dir = 1 - }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 6; + icon_state = "blue" }, -/area/almayer/lifeboat_pumps/north2) +/area/almayer/living/pilotbunks) "qbZ" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/glass{ dir = 1; @@ -59808,6 +60215,21 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/starboard_hallway) +"qcq" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/sign/safety/waterhazard{ + pixel_y = 32 + }, +/obj/structure/sign/safety/rewire{ + pixel_x = 14; + pixel_y = 32 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "qcy" = ( /obj/structure/sign/safety/bathunisex{ pixel_x = 8; @@ -59918,10 +60340,8 @@ /obj/structure/machinery/computer/emails{ dir = 1 }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "redcorner" - }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, /area/almayer/shipboard/port_missiles) "qfh" = ( /obj/structure/bed/chair{ @@ -59970,14 +60390,13 @@ }, /area/almayer/shipboard/brig/main_office) "qga" = ( -/obj/structure/machinery/space_heater, -/obj/structure/sign/safety/maint{ - pixel_x = 32 +/obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + dir = 1 }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "test_floor4" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/living/starboard_garden) "qgG" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -60002,8 +60421,8 @@ "qgK" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/airlock/almayer/generic/press{ - name = "\improper Combat Correspondent Room"; - dir = 1 + dir = 1; + name = "\improper Combat Correspondent Room" }, /turf/open/floor/almayer, /area/almayer/command/combat_correspondent) @@ -60165,6 +60584,7 @@ /obj/structure/sign/safety/maint{ pixel_x = -17 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_s) "qld" = ( @@ -60301,6 +60721,12 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/perma) +"qnd" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/hangar) "qnh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60717,6 +61143,16 @@ }, /turf/closed/wall/almayer/research/containment/wall/purple, /area/almayer/medical/containment/cell) +"qxz" = ( +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + dir = 2; + name = "\improper Evacuation Airlock PU-5"; + req_access = null + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/powered) "qxA" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ @@ -60805,10 +61241,6 @@ /obj/structure/surface/table/almayer, /obj/item/storage/photo_album, /obj/item/device/camera_film, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, /turf/open/floor/almayer, /area/almayer/command/corporateliason) "qyD" = ( @@ -61088,13 +61520,14 @@ }, /area/almayer/squads/delta) "qFQ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/prop/invuln/overhead_pipe{ - dir = 4; - pixel_y = 13 +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_p) +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/hallways/aft_hallway) "qFW" = ( /obj/structure/sign/safety/storage{ pixel_x = 8; @@ -61149,20 +61582,15 @@ }, /area/almayer/hallways/starboard_hallway) "qHq" = ( -/obj/structure/surface/table/reinforced/almayer_B, -/obj/item/ashtray/bronze, -/obj/item/clothing/mask/cigarette/weed{ - desc = "What in the god damn?"; - name = "marijuana cigarette" - }, -/obj/item/trash/cigbutt{ - pixel_x = -10; - pixel_y = 13 +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + dir = 2; + name = "\improper Evacuation Airlock SU-6"; + req_access = null }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "test_floor4" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/powered) "qHF" = ( /obj/structure/surface/table/almayer, /obj/item/storage/box/bodybags{ @@ -61364,11 +61792,13 @@ }, /area/almayer/medical/containment) "qLj" = ( -/obj/structure/pipes/vents/pump{ - dir = 1 +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" }, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/south1) +/turf/open/floor/almayer{ + icon_state = "blue" + }, +/area/almayer/hallways/aft_hallway) "qLo" = ( /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, @@ -61708,6 +62138,16 @@ }, /turf/open/floor/plating, /area/almayer/living/port_emb) +"qSX" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "qTY" = ( /obj/structure/machinery/gibber, /turf/open/floor/plating/plating_catwalk, @@ -61833,6 +62273,12 @@ icon_state = "plate" }, /area/almayer/squads/delta) +"qWI" = ( +/obj/structure/machinery/status_display{ + pixel_y = -30 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/north1) "qWR" = ( /turf/closed/wall/almayer/research/containment/wall/corner{ dir = 4 @@ -62383,6 +62829,9 @@ /area/almayer/hull/upper_hull/u_m_p) "riP" = ( /obj/structure/machinery/light, +/obj/structure/sign/safety/rewire{ + pixel_y = -32 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -62959,10 +63408,6 @@ }, /area/almayer/hallways/hangar) "ruz" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, /obj/structure/reagent_dispensers/watertank, /turf/open/floor/almayer{ icon_state = "cargo" @@ -63058,14 +63503,11 @@ }, /area/almayer/medical/lower_medical_medbay) "ryG" = ( -/obj/structure/largecrate/random/case, -/obj/structure/machinery/light{ - dir = 1 - }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "mono" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/lifeboat_pumps/north1) "ryR" = ( /obj/structure/machinery/cm_vending/sorted/uniform_supply/squad_prep{ req_access = list(1) @@ -63090,10 +63532,10 @@ icon_state = "NW-out" }, /obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + access_modified = 1; name = "\improper Brig"; req_access = null; - req_one_access_txt = "1;3"; - access_modified = 1 + req_one_access_txt = "1;3" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -63103,6 +63545,8 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) "rzN" = ( @@ -63204,7 +63648,7 @@ "rBx" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/tool/stamp/ro{ - name = "spare quartermaster's rubber stamp"; + name = "spare requisitions officer's rubber stamp"; pixel_x = -7; pixel_y = 11 }, @@ -63213,7 +63657,9 @@ }, /area/almayer/command/cichallway) "rBH" = ( -/obj/structure/machinery/constructable_frame, +/obj/structure/machinery/constructable_frame{ + icon_state = "box_2" + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -63725,13 +64171,14 @@ }, /area/almayer/powered/agent) "rKs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/machinery/door/airlock/almayer/maint{ + req_one_access = null; + req_one_access_txt = "2;30;34" }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "test_floor4" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hull/upper_hull/u_m_s) "rKy" = ( /obj/structure/machinery/firealarm{ dir = 1; @@ -63837,6 +64284,7 @@ /obj/structure/surface/table/reinforced/almayer_B, /obj/item/clipboard, /obj/item/device/binoculars, +/obj/item/storage/bible, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -63937,7 +64385,13 @@ /area/almayer/squads/charlie) "rQW" = ( /obj/item/tool/screwdriver, -/turf/open/floor/almayer, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, /area/almayer/lifeboat_pumps/south1) "rQY" = ( /obj/structure/bed, @@ -63953,6 +64407,13 @@ "rRq" = ( /turf/closed/wall/almayer, /area/almayer/lifeboat_pumps/south2) +"rRz" = ( +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "rRQ" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -64065,11 +64526,11 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) "rTY" = ( -/obj/structure/transmitter{ +/obj/structure/transmitter/no_dnd{ name = "Requisition Telephone"; phone_category = "Almayer"; phone_id = "Requisition"; - pixel_y = 30 + pixel_y = 30; }, /turf/open/floor/almayer{ dir = 5; @@ -64290,6 +64751,16 @@ icon_state = "red" }, /area/almayer/shipboard/brig/general_equipment) +"sah" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/hallways/aft_hallway) "saB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -64630,11 +65101,8 @@ }, /area/almayer/lifeboat_pumps/south2) "sht" = ( -/obj/structure/machinery/power/apc/almayer/hardened, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south2) +/turf/open/floor/almayer, +/area/almayer/living/pilotbunks) "shw" = ( /obj/structure/largecrate/random/barrel/green, /turf/open/floor/plating/plating_catwalk, @@ -64882,6 +65350,12 @@ allow_construction = 0 }, /area/almayer/hallways/port_hallway) +"sou" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/hallways/starboard_hallway) "sow" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -65313,6 +65787,13 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"syP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/port_hallway) "szm" = ( /obj/structure/machinery/power/fusion_engine{ name = "\improper S-52 fusion reactor 10" @@ -65356,11 +65837,20 @@ }, /area/almayer/squads/charlie) "szO" = ( -/obj/structure/machinery/cm_vending/sorted/cargo_guns/pilot_officer, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, /area/almayer/living/pilotbunks) +"szU" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/numbertwobunks) "sAc" = ( /obj/structure/bed/chair{ dir = 8; @@ -65408,12 +65898,12 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/machinery/door/airlock/almayer/command/reinforced{ + access_modified = 1; dir = 1; id_tag = "CO-Office"; name = "\improper Commanding Officer's Office"; req_access = null; - req_access_txt = "31"; - access_modified = 1 + req_access_txt = "31" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -65469,7 +65959,10 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "blue" + }, /area/almayer/living/pilotbunks) "sCQ" = ( /obj/structure/machinery/light, @@ -65498,10 +65991,17 @@ pixel_y = 26 }, /turf/open/floor/almayer{ - dir = 4; - icon_state = "silvercorner" + dir = 1; + icon_state = "silver" }, /area/almayer/hallways/aft_hallway) +"sDD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/port_missiles) "sDM" = ( /turf/open/floor/almayer{ dir = 9; @@ -65722,22 +66222,19 @@ /turf/open/floor/engine, /area/almayer/engineering/airmix) "sHp" = ( -/obj/effect/step_trigger/clone_cleaner, -/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/structure/largecrate/random/case/small, +/obj/structure/sign/safety/maint{ + pixel_x = 32 + }, /turf/open/floor/almayer, -/area/almayer/hallways/aft_hallway) +/area/almayer/lifeboat_pumps/north1) "sHM" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/structure/bed/chair{ - dir = 1 - }, +/obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ - dir = 8; - icon_state = "red" + icon_state = "test_floor4" }, -/area/almayer/shipboard/starboard_missiles) +/area/almayer/living/pilotbunks) "sHY" = ( /obj/structure/sign/poster{ pixel_y = -32 @@ -66175,6 +66672,12 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) +"sTB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "sTV" = ( /obj/structure/machinery/power/apc/almayer/hardened{ cell_type = /obj/item/cell/hyper; @@ -66379,15 +66882,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) -"sYn" = ( -/obj/structure/sign/safety/rewire{ - pixel_x = 8; - pixel_y = -32 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south2) "sYw" = ( /obj/structure/platform{ dir = 8 @@ -66405,7 +66899,8 @@ "sYB" = ( /obj/structure/closet/secure_closet/guncabinet/red, /obj/effect/decal/warning_stripes{ - icon_state = "N" + icon_state = "N"; + pixel_y = 2 }, /obj/item/ammo_magazine/smg/m39, /obj/item/ammo_magazine/smg/m39, @@ -66709,9 +67204,14 @@ /turf/open/floor/almayer, /area/almayer/living/cryo_cells) "teB" = ( -/obj/structure/largecrate/random/case/small, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/north1) +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "teY" = ( /obj/structure/machinery/light{ dir = 1 @@ -66772,6 +67272,11 @@ pixel_y = 5 }, /obj/structure/surface/table/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1; + pixel_y = 1 + }, /turf/open/floor/almayer{ dir = 5; icon_state = "plating" @@ -66936,9 +67441,9 @@ "tiR" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ + access_modified = 1; req_one_access = null; - req_one_access_txt = "7;19"; - access_modified = 1 + req_one_access_txt = "7;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -67007,13 +67512,12 @@ }, /area/almayer/shipboard/brig/processing) "tld" = ( -/obj/structure/machinery/shower{ - dir = 8 +/obj/structure/machinery/prop/almayer/computer{ + dir = 8; + pixel_x = 16 }, -/obj/structure/machinery/door/window/westright, -/obj/item/tool/soap, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/living/pilotbunks) "tly" = ( @@ -67082,6 +67586,17 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) +"tmI" = ( +/obj/structure/machinery/light, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/lifeboat_pumps/south1) "tmK" = ( /obj/structure/machinery/door/airlock/almayer/maint{ dir = 1; @@ -67389,7 +67904,7 @@ pixel_x = 32 }, /turf/open/floor/almayer{ - icon_state = "red" + icon_state = "test_floor4" }, /area/almayer/lifeboat_pumps/north1) "tsy" = ( @@ -67705,6 +68220,9 @@ /area/almayer/medical/containment/cell) "tyK" = ( /obj/effect/spawner/random/toolbox, +/obj/structure/machinery/light{ + dir = 4 + }, /turf/open/floor/almayer{ dir = 1; icon_state = "cargo_arrow" @@ -67733,6 +68251,10 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"tzj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_p) "tzx" = ( /obj/structure/machinery/cm_vending/sorted/medical/blood, /obj/structure/machinery/light{ @@ -67752,20 +68274,13 @@ }, /area/almayer/engineering/engineering_workshop) "tzL" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, /obj/structure/sign/safety/waterhazard{ pixel_x = 8; pixel_y = -32 }, +/obj/structure/machinery/portable_atmospherics/hydroponics, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "test_floor5" }, /area/almayer/medical/hydroponics) "tzP" = ( @@ -67792,8 +68307,8 @@ "tAq" = ( /obj/structure/surface/table/reinforced/black, /obj/item/clothing/mask/breath{ - pixel_y = -5; - pixel_x = -3 + pixel_x = -3; + pixel_y = -5 }, /obj/item/clothing/head/helmet/space/compression/uscm, /obj/item/cell/crap{ @@ -67840,8 +68355,11 @@ }, /area/almayer/medical/lower_medical_medbay) "tAV" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) +"tBq" = ( +/obj/item/tool/crowbar, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/south1) "tBz" = ( @@ -67898,9 +68416,13 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) "tDA" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_p) +/obj/item/tool/weldpack{ + pixel_y = 15 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "tDZ" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -67979,13 +68501,12 @@ /area/almayer/squads/req) "tFW" = ( /obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ - dir = 1; - icon_state = "red" + icon_state = "test_floor4" }, /area/almayer/lifeboat_pumps/south1) "tGd" = ( @@ -68201,10 +68722,10 @@ dir = 1 }, /obj/structure/machinery/door/airlock/almayer/generic{ + access_modified = 1; dir = 1; name = "Storage"; - req_one_access = "2;21"; - access_modified = 1 + req_one_access_txt = "19;21" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -68444,10 +68965,10 @@ /area/almayer/living/grunt_rnr) "tPj" = ( /obj/structure/machinery/door/airlock/almayer/marine/requisitions{ + access_modified = 1; name = "\improper Requisition's Office"; - req_one_access_txt = "1;26"; req_one_access = null; - access_modified = 1 + req_one_access_txt = "1;26" }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -68474,10 +68995,10 @@ /turf/open/floor/almayer, /area/almayer/living/briefing) "tQE" = ( -/obj/structure/machinery/power/apc/almayer{ - dir = 1 +/obj/item/clothing/head/welding, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_s) "tQL" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -68704,10 +69225,10 @@ name = "\improper CMO Office Shutters" }, /obj/structure/machinery/door/airlock/almayer/medical/glass{ + access_modified = 1; name = "\improper CMO's Office"; req_one_access = null; - req_one_access_txt = "1;5"; - access_modified = 1 + req_one_access_txt = "1;5" }, /obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ @@ -68752,9 +69273,9 @@ "tXG" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/door/window/eastright{ + access_modified = 1; dir = 8; - req_access_txt = "19"; - access_modified = 1 + req_access_txt = "19" }, /obj/effect/landmark/map_item, /obj/structure/machinery/door/window/eastleft{ @@ -68932,10 +69453,11 @@ /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_m_p) "uac" = ( -/obj/structure/largecrate/random/case, /obj/structure/machinery/light{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/surface/table/almayer, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) "uah" = ( @@ -68991,11 +69513,11 @@ /turf/open/floor/almayer, /area/almayer/command/computerlab) "uaZ" = ( -/obj/structure/sign/safety/storage{ - pixel_x = 8; - pixel_y = -32 +/obj/structure/surface/table/almayer, +/obj/item/weapon/gun/rifle/m41a, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_s) "ubd" = ( /obj/structure/surface/rack, @@ -69374,10 +69896,10 @@ /area/almayer/squads/charlie_delta_shared) "ukW" = ( /obj/structure/machinery/door/airlock/almayer/security{ + access_modified = 1; name = "\improper Security Checkpoint"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -69395,12 +69917,8 @@ }, /area/almayer/shipboard/brig/evidence_storage) "uli" = ( -/obj/structure/surface/rack, -/obj/effect/spawner/random/facepaint, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) +/turf/open/floor/grass, +/area/almayer/living/starboard_garden) "uly" = ( /obj/structure/bed/stool, /turf/open/floor/almayer{ @@ -69445,16 +69963,24 @@ icon_state = "mono" }, /area/almayer/medical/upper_medical) +"umR" = ( +/obj/structure/machinery/power/apc/almayer/hardened{ + cell_type = /obj/item/cell/hyper; + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north2) "umS" = ( -/obj/structure/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/obj/structure/bed/chair/comfy{ + dir = 8 }, /turf/open/floor/almayer{ dir = 4; - icon_state = "red" + icon_state = "blue" }, -/area/almayer/shipboard/starboard_missiles) +/area/almayer/living/pilotbunks) "umT" = ( /obj/structure/machinery/door/airlock/almayer/security/glass{ name = "Brig" @@ -69538,13 +70064,12 @@ }, /area/almayer/command/computerlab) "uoS" = ( -/obj/structure/sign/safety/maint{ - pixel_x = -17 - }, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light/small{ + dir = 4 }, -/area/almayer/living/starboard_garden) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "uoY" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin/uscm{ @@ -69703,6 +70228,13 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south1) +"uso" = ( +/obj/structure/largecrate/random/case/double, +/obj/structure/machinery/light/small, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_p) "usr" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/secure_data{ @@ -69901,6 +70433,21 @@ icon_state = "orangecorner" }, /area/almayer/squads/bravo) +"uvy" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/almayer/shipboard/brig/armory) "uvG" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -69934,12 +70481,13 @@ }, /area/almayer/medical/containment/cell) "uvS" = ( -/obj/structure/sign/safety/hvac_old{ - pixel_x = 8; - pixel_y = 32 +/obj/structure/surface/rack, +/obj/item/stack/cable_coil, +/obj/item/attachable/flashlight/grip, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hull/upper_hull/u_m_s) "uvY" = ( /turf/open/floor/almayer{ dir = 8; @@ -69966,6 +70514,14 @@ /obj/structure/surface/table/woodentable/fancy, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) +"uws" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "cargo_arrow" + }, +/area/almayer/shipboard/port_missiles) "uwv" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/weapon_room/notunnel) @@ -70188,8 +70744,15 @@ icon_state = "redcorner" }, /area/almayer/shipboard/brig/main_office) +"uAb" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/hangar) "uAj" = ( /obj/structure/bed/chair, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ dir = 1; icon_state = "red" @@ -70243,7 +70806,12 @@ }, /area/almayer/squads/bravo) "uBi" = ( -/obj/structure/largecrate/random/case/double, +/obj/effect/decal/cleanable/dirt, +/obj/structure/surface/table/almayer, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22"; + pixel_y = 8 + }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) "uBn" = ( @@ -70490,6 +71058,12 @@ icon_state = "test_floor4" }, /area/almayer/hallways/aft_hallway) +"uGt" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/turf/open/floor/almayer, +/area/almayer/hallways/aft_hallway) "uGw" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/drinks/cans/souto/diet/lime{ @@ -70499,13 +71073,12 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) "uGz" = ( -/obj/structure/machinery/camera/autoname/almayer{ - name = "ship-grade camera" - }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/largecrate/random/secure, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "plate" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hull/upper_hull/u_m_s) "uGQ" = ( /obj/structure/machinery/suit_storage_unit/compression_suit/uscm, /turf/open/floor/almayer{ @@ -70513,13 +71086,15 @@ }, /area/almayer/engineering/upper_engineering/starboard) "uId" = ( -/obj/structure/bed/chair/comfy/teal{ - dir = 8 +/obj/effect/decal/warning_stripes{ + icon_state = "W" }, +/obj/effect/step_trigger/clone_cleaner, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 9; + icon_state = "green" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hallways/aft_hallway) "uIp" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/light{ @@ -70838,11 +71413,10 @@ /turf/closed/wall/almayer/outer, /area/almayer/lifeboat_pumps/south2) "uOJ" = ( -/obj/structure/machinery/prop/almayer/computer{ - dir = 8; - pixel_x = 16 +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "mono" }, -/turf/open/floor/almayer, /area/almayer/living/pilotbunks) "uPr" = ( /turf/open/floor/almayer{ @@ -70872,6 +71446,13 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/perma) +"uQn" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 3 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/starboard_hallway) "uQU" = ( /obj/structure/stairs{ dir = 1 @@ -71002,9 +71583,12 @@ /turf/open/floor/almayer, /area/almayer/squads/bravo) "uTN" = ( -/obj/effect/landmark/start/liaison, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/command/corporateliason) +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/living/pilotbunks) "uTU" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -71020,11 +71604,12 @@ }, /area/almayer/command/cic) "uTY" = ( -/obj/item/trash/cigbutt/ucigbutt, +/obj/effect/step_trigger/clone_cleaner, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 1; + icon_state = "green" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hallways/aft_hallway) "uTZ" = ( /obj/structure/machinery/light/small, /turf/open/floor/almayer{ @@ -71177,13 +71762,9 @@ /obj/structure/machinery/light{ dir = 1 }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pilot_officer, /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "plate" }, /area/almayer/living/pilotbunks) "uWc" = ( @@ -71398,12 +71979,9 @@ }, /area/almayer/medical/lower_medical_medbay) "vce" = ( -/obj/structure/surface/rack, -/obj/effect/spawner/random/tool, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south1) +/obj/docking_port/stationary/escape_pod/south, +/turf/open/floor/plating, +/area/almayer/hull/upper_hull/u_m_p) "vcq" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -71437,6 +72015,10 @@ icon_state = "red" }, /area/almayer/shipboard/brig/general_equipment) +"vcK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "vdJ" = ( /obj/structure/surface/table/almayer, /obj/item/pipe{ @@ -71901,6 +72483,10 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) +"vjK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, +/area/almayer/shipboard/port_missiles) "vka" = ( /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) @@ -72034,6 +72620,11 @@ /area/almayer/hull/lower_hull/l_f_s) "vmN" = ( /obj/structure/machinery/light, +/obj/structure/surface/table/almayer, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22"; + pixel_y = 8 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -72286,15 +72877,15 @@ /area/almayer/shipboard/brig/armory) "vsJ" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 1; name = "\improper Power Control Room"; req_access = null; req_one_access = null; - req_one_access_txt = "3;6"; - access_modified = 1 + req_one_access_txt = "3;6" }, /turf/open/floor/almayer{ - icon_state = "orangefull" + icon_state = "test_floor4" }, /area/almayer/shipboard/brig/processing) "vsV" = ( @@ -72596,6 +73187,13 @@ "vzp" = ( /turf/open/floor/almayer/research/containment/entrance, /area/almayer/medical/containment/cell/cl) +"vzq" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 3 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/port_hallway) "vzu" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -72823,11 +73421,11 @@ /area/almayer/living/briefing) "vEI" = ( /obj/structure/machinery/door/airlock/almayer/medical/glass{ + access_modified = 1; dir = 2; name = "\improper Field Surgery Equipment"; req_access_txt = "20"; - req_one_access = null; - access_modified = 1 + req_one_access = null }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 1 @@ -72837,9 +73435,16 @@ }, /area/almayer/medical/lower_medical_medbay) "vFb" = ( -/obj/item/tool/crowbar, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/south1) +/obj/structure/surface/table/almayer, +/obj/item/attachable/lasersight, +/obj/item/reagent_container/food/drinks/cans/souto/vanilla{ + pixel_x = 10; + pixel_y = 11 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "vFh" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/storage/toolbox/mechanical{ @@ -72894,6 +73499,15 @@ icon_state = "orangefull" }, /area/almayer/living/briefing) +"vGI" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/numbertwobunks) "vHa" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/computer/ares_console{ @@ -72916,6 +73530,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/living/port_emb) +"vHs" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/starboard_hallway) "vHO" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -73122,6 +73743,15 @@ icon_state = "test_floor4" }, /area/almayer/medical/upper_medical) +"vLv" = ( +/obj/structure/largecrate/random/case/double, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_p) "vLA" = ( /obj/effect/decal/warning_stripes{ icon_state = "W"; @@ -73920,14 +74550,15 @@ }, /area/almayer/hallways/aft_hallway) "wbu" = ( -/obj/structure/machinery/light{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 1; + name = "ship-grade camera" }, /turf/open/floor/almayer{ - dir = 8; - icon_state = "red" + icon_state = "mono" }, -/area/almayer/shipboard/port_missiles) +/area/almayer/living/pilotbunks) "wbx" = ( /obj/structure/sign/safety/hazard{ desc = "A sign that warns of a hazardous environment nearby"; @@ -73969,7 +74600,15 @@ /obj/structure/machinery/status_display{ pixel_y = 30 }, -/turf/open/floor/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21"; + pixel_y = 15 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, /area/almayer/living/pilotbunks) "wbP" = ( /obj/structure/machinery/bioprinter{ @@ -74094,11 +74733,14 @@ }, /area/almayer/medical/hydroponics) "wex" = ( -/obj/structure/machinery/light{ - dir = 4 +/obj/structure/sign/safety/bathunisex{ + pixel_x = 8; + pixel_y = -25 }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_s) +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/living/pilotbunks) "weB" = ( /obj/item/tool/screwdriver{ layer = 2.9; @@ -74388,9 +75030,9 @@ "wkc" = ( /obj/structure/surface/table/reinforced/prison, /obj/structure/machinery/door/window/eastright{ + access_modified = 1; dir = 8; - req_access_txt = "8"; - access_modified = 1 + req_access_txt = "8" }, /obj/structure/machinery/door/window/eastleft{ req_access_txt = "8" @@ -74670,8 +75312,8 @@ dir = 1 }, /obj/structure/pipes/vents/pump/no_boom{ - name = "Security Vent"; - desc = "Has a valve and pump attached to it, connected to multiple gas tanks." + desc = "Has a valve and pump attached to it, connected to multiple gas tanks."; + name = "Security Vent" }, /turf/open/floor/almayer/no_build{ icon_state = "plating" @@ -74772,11 +75414,14 @@ }, /turf/open/floor/almayer, /area/almayer/living/gym) -"wrT" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 +"wrQ" = ( +/obj/structure/sign/safety/storage{ + pixel_x = 8; + pixel_y = -32 }, +/turf/open/floor/almayer, +/area/almayer/living/starboard_garden) +"wrT" = ( /obj/structure/surface/table/almayer, /obj/item/device/radio/marine, /obj/item/device/radio/marine, @@ -74797,6 +75442,16 @@ icon_state = "sterile_green" }, /area/almayer/medical/containment) +"wst" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/step_trigger/clone_cleaner, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "green" + }, +/area/almayer/hallways/aft_hallway) "wsD" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -74810,12 +75465,11 @@ }, /area/almayer/squads/bravo) "wta" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/structure/closet/crate, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, -/area/almayer/hallways/aft_hallway) +/area/almayer/hull/upper_hull/u_m_s) "wtd" = ( /obj/structure/machinery/vending/coffee, /obj/item/toy/bikehorn/rubberducky{ @@ -74913,11 +75567,11 @@ /area/almayer/lifeboat_pumps/south1) "wvl" = ( /obj/structure/machinery/door/airlock/almayer/security{ + access_modified = 1; dir = 2; name = "\improper Security Checkpoint"; req_access = null; - req_one_access_txt = "3;19"; - access_modified = 1 + req_one_access_txt = "3;19" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -75077,11 +75731,15 @@ }, /area/almayer/command/airoom) "wyK" = ( -/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/open/floor/almayer{ - icon_state = "orangecorner" + dir = 1; + icon_state = "silvercorner" }, -/area/almayer/hallways/stern_hallway) +/area/almayer/shipboard/brig/cic_hallway) "wyO" = ( /obj/structure/largecrate/random/barrel/red, /obj/structure/prop/invuln/overhead_pipe{ @@ -75407,10 +76065,7 @@ /obj/structure/machinery/light{ dir = 4 }, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "red" - }, +/turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/port_missiles) "wGX" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -75479,10 +76134,10 @@ /area/almayer/medical/lower_medical_medbay) "wJo" = ( /obj/structure/machinery/door/airlock/almayer/research/reinforced{ + access_modified = 1; dir = 1; name = "\improper CMO's Bedroom"; - req_one_access_txt = "1;5"; - access_modified = 1 + req_one_access_txt = "1;5" }, /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -75521,17 +76176,16 @@ /turf/closed/wall/almayer/research/containment/wall/east, /area/almayer/medical/containment/cell/cl) "wKn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/structure/surface/rack, +/obj/item/facepaint/sniper, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/hull/upper_hull/u_m_p) +/area/almayer/hull/upper_hull/u_m_s) "wKF" = ( /obj/structure/machinery/power/apc/almayer{ - dir = 1; - pixel_y = 25 + cell_type = /obj/item/cell/hyper; + dir = 1 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -75591,8 +76245,8 @@ /area/almayer/lifeboat_pumps/south2) "wLy" = ( /obj/structure/pipes/vents/pump/no_boom{ - welded = 1; - name = "Secure Reinforced Air Vent" + name = "Secure Reinforced Air Vent"; + welded = 1 }, /turf/open/floor/almayer/research/containment/floor2{ dir = 1 @@ -75713,9 +76367,13 @@ /area/almayer/living/briefing) "wNU" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 2; - req_one_access = list(2,34,30); - access_modified = 1 + req_one_access = list(2,34,30) + }, +/obj/structure/machinery/door/poddoor/almayer/open{ + id = "Brig Lockdown Shutters"; + name = "\improper Brig Lockdown Shutter" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -75949,10 +76607,9 @@ }, /area/almayer/squads/charlie_delta_shared) "wTy" = ( -/obj/item/reagent_container/glass/rag, +/obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ - dir = 4; - icon_state = "red" + icon_state = "test_floor4" }, /area/almayer/lifeboat_pumps/south1) "wTJ" = ( @@ -76037,7 +76694,10 @@ /obj/structure/bed/chair/comfy{ dir = 4 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "blue" + }, /area/almayer/living/pilotbunks) "wUS" = ( /obj/structure/disposalpipe/segment{ @@ -76074,7 +76734,8 @@ /obj/item/vehicle_clamp, /obj/item/vehicle_clamp, /obj/effect/decal/warning_stripes{ - icon_state = "N" + icon_state = "N"; + pixel_y = 2 }, /obj/item/ammo_magazine/smg/m39, /obj/item/ammo_magazine/smg/m39, @@ -76192,13 +76853,10 @@ /turf/closed/wall/almayer/research/containment/wall/north, /area/almayer/medical/containment/cell) "wWC" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_21" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" +/turf/open/floor/almayer{ + dir = 10; + icon_state = "blue" }, -/turf/open/floor/almayer, /area/almayer/living/pilotbunks) "wWL" = ( /obj/item/tool/screwdriver, @@ -76269,18 +76927,24 @@ icon_state = "test_floor4" }, /area/almayer/hallways/hangar) -"wYA" = ( -/obj/structure/bed/chair/comfy/teal{ - dir = 8 +"wYj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 }, -/obj/item/trash/cigbutt{ - pixel_x = -12; - pixel_y = 17 +/obj/structure/bed/sofa/south/white/left{ + pixel_y = 16 }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 9; + icon_state = "silver" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/hull/upper_hull/u_m_p) +"wYA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/north1) "wYK" = ( /obj/structure/barricade/handrail/medical, /turf/open/floor/almayer{ @@ -76358,12 +77022,13 @@ }, /area/almayer/hull/lower_hull/l_a_s) "wZM" = ( -/obj/structure/bed/sofa/south, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ - dir = 1; - icon_state = "silver" + icon_state = "blue" }, -/area/almayer/shipboard/brig/cic_hallway) +/area/almayer/hallways/aft_hallway) "wZT" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -76560,15 +77225,11 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull) "xfh" = ( -/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ - dir = 2; - name = "\improper Evacuation Airlock PU-5"; - req_access = null - }, +/obj/structure/largecrate/supply/floodlights, /turf/open/floor/almayer{ - icon_state = "test_floor4" + icon_state = "plate" }, -/area/almayer/powered) +/area/almayer/hull/upper_hull/u_m_p) "xfi" = ( /obj/structure/machinery/power/smes/buildable, /obj/structure/machinery/light{ @@ -77027,10 +77688,8 @@ /area/almayer/engineering/upper_engineering/port) "xoS" = ( /obj/effect/decal/warning_stripes{ - icon_state = "N" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E" + icon_state = "N"; + pixel_y = 2 }, /obj/structure/closet/secure_closet/guncabinet/red, /obj/item/weapon/gun/rifle/m4ra, @@ -77078,10 +77737,10 @@ dir = 1 }, /obj/structure/machinery/door/airlock/multi_tile/almayer/secdoor/glass/reinforced{ + access_modified = 1; name = "\improper Brig"; req_access = null; - req_one_access_txt = "1;3"; - access_modified = 1 + req_one_access_txt = "1;3" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -77230,10 +77889,10 @@ /area/almayer/hallways/vehiclehangar) "xtC" = ( /obj/structure/machinery/door/airlock/almayer/maint{ + access_modified = 1; dir = 1; req_one_access = null; - req_one_access_txt = "30;19"; - access_modified = 1 + req_one_access_txt = "30;19" }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -77330,6 +77989,13 @@ icon_state = "plating" }, /area/almayer/engineering/engine_core) +"xuY" = ( +/obj/structure/sign/safety/escapepod{ + pixel_x = 8; + pixel_y = 32 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "xuZ" = ( /turf/open/floor/almayer{ dir = 8; @@ -77787,6 +78453,7 @@ pixel_y = 3 }, /obj/item/folder/yellow, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -77960,15 +78627,11 @@ }, /area/almayer/squads/alpha_bravo_shared) "xHG" = ( -/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ - dir = 2; - name = "\improper Evacuation Airlock SU-5"; - req_access = null - }, +/obj/structure/surface/rack, /turf/open/floor/almayer{ - icon_state = "test_floor4" + icon_state = "plate" }, -/area/almayer/powered) +/area/almayer/hull/upper_hull/u_m_p) "xHM" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/sentencing, @@ -78355,7 +79018,10 @@ /obj/structure/pipes/vents/pump{ dir = 8 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "bluecorner" + }, /area/almayer/living/pilotbunks) "xQm" = ( /turf/open/floor/almayer/research/containment/floor2{ @@ -78694,6 +79360,12 @@ "xVk" = ( /turf/open/space, /area/space/almayer/lifeboat_dock) +"xVF" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "xVI" = ( /obj/structure/largecrate/random/case, /turf/open/floor/almayer{ @@ -78739,9 +79411,9 @@ /area/almayer/squads/alpha_bravo_shared) "xWo" = ( /obj/structure/machinery/door/airlock/almayer/maint{ - req_one_access_txt = "19;21"; access_modified = 1; - req_one_access = null + req_one_access = null; + req_one_access_txt = "19;21" }, /turf/open/floor/almayer{ icon_state = "plate" @@ -78757,22 +79429,20 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cic_hallway) "xWF" = ( -/obj/structure/machinery/door/airlock/almayer/maint{ - dir = 2; - req_one_access = list(2,34,30); - access_modified = 1 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" +/obj/structure/machinery/light/small{ + dir = 8 }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) "xWO" = ( -/obj/item/stack/catwalk, -/obj/structure/cable/heavyduty{ - icon_state = "4-8" +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = -25 }, -/turf/open/floor/plating, -/area/almayer/lifeboat_pumps/south1) +/obj/structure/largecrate/random/case/small, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "xWT" = ( /obj/structure/machinery/shower{ pixel_y = 16 @@ -79334,13 +80004,8 @@ }, /area/almayer/medical/morgue) "yji" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/machinery/door/airlock/almayer/maint, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) "yjq" = ( /obj/structure/machinery/door/poddoor/almayer/locked{ @@ -79352,11 +80017,14 @@ }, /area/almayer/engineering/upper_engineering/notunnel) "yjM" = ( -/obj/effect/decal/cleanable/blood/oil, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, /turf/open/floor/almayer{ - icon_state = "mono" + dir = 4; + icon_state = "blue" }, -/area/almayer/lifeboat_pumps/south2) +/area/almayer/living/pilotbunks) "ykj" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -79467,6 +80135,18 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) +"ymi" = ( +/obj/structure/machinery/door/airlock/almayer/maint{ + req_one_access = null; + req_one_access_txt = "2;30;34" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_f_p) (1,1,1) = {" aaa @@ -90483,7 +91163,7 @@ lMc gjL cMl oeB -euO +rkL ldu eRL jZL @@ -91686,7 +92366,7 @@ lrq mAr uqo fsT -fsT +jnA fDn lrq tqV @@ -92091,7 +92771,7 @@ aou lrq mAr uqo -fsT +uvy tfO fsz lrq @@ -93912,7 +94592,7 @@ bdH aad aag pCi -nfI +wcn rPC cQv cQv @@ -93923,7 +94603,7 @@ dvT ieo vxC ldD -wZM +vGA hUW dHd vka @@ -94115,8 +94795,8 @@ aaf aag aag pCi -bsf -ahX +hKi +wcn aFN wcn cXZ @@ -94153,7 +94833,7 @@ kIV hUc wNU mnm -fwF +sIk xEF aag aag @@ -94318,9 +94998,9 @@ adG adG adG adG -akC -akC -akC +bsf +fwF +dav rPC rPC kDb @@ -94354,9 +95034,9 @@ czB mtl mnm kIV -kCi -kCi -kCi +wNU +kIV +alv tuA tuA tuA @@ -94520,13 +95200,13 @@ aeK aeK bur hdd -aok -sHM -aHY +akC +akC +akC akC cVJ rPC -rPC +jvJ vxM sVy mKh @@ -94556,11 +95236,11 @@ kHK wfL mtl mnm -kIV +dGc +kCi +kCi +kCi kCi -dUI -wbu -rVN hjA nIE jKn @@ -94724,8 +95404,8 @@ aeK bur wdI sFf -adu -aHZ +bbV +bzz akC cRc rPC @@ -94759,9 +95439,9 @@ sBH vfv mtl mnm -kIV +dGc kCi -nRR +sDD kOv cRv sQF @@ -95130,7 +95810,7 @@ amz amz aly nkx -adu +bbZ btv akC dDC @@ -95163,7 +95843,7 @@ lNF rkK cIK mtl -mnm +tzj kIV bbR kCi @@ -95366,7 +96046,7 @@ pJE wPk hRy mtl -mnm +tzj kIV bVT kCi @@ -95742,7 +96422,7 @@ nIt adu hxG akC -avl +fvu qkn wcn vxM @@ -95971,17 +96651,17 @@ vGA uwN pYX xuZ -jnD +wyK elh rzM aBN fQS -tJo -tJo +bVr +bVr bpd bqT vZv -btD +vjK awC uMj uMj @@ -96173,19 +96853,19 @@ awz vSN mPj rWs -mIy -eEw +iVY +odM lPC -vka +mgy wWT xuB -gpe +vcK czJ kCi nRR btM -btD -hjA +vjK +dUZ nIE jKn pyi @@ -96347,7 +97027,7 @@ afa aeK bur wdI -sFf +aHY tyK iKI akC @@ -96385,10 +97065,10 @@ lIV gsH qFl kCi -nRR -kOv +cfk +uws cRv -sQF +nwx nIE jKn vjg @@ -96550,14 +97230,14 @@ aeK aeK bur xFP -umS -jvJ -aex +akC +akC +akC akC fcF avl lFb -avl +fvu age age vSN @@ -96585,12 +97265,12 @@ qFl qFl gpe xuB -gpe +vcK mBA kCi -pLW +kCi wGI -pPN +kCi vmW nIE jKn @@ -96754,13 +97434,13 @@ adG adG adG adG -akC -akC -akC +puK avl +dUI avl -lFb avl +lFb +fvu xDp age xDn @@ -96789,10 +97469,10 @@ rnM gpe sDy ukU -cNe -qFl -qFl -kCi +bfP +fvv +vcK +vcK tuA tuA tuA @@ -96957,9 +97637,9 @@ aag aag aag pCi -puK +avl nMc -iJf +ayP iJf iJf sFZ @@ -97161,10 +97841,10 @@ aag aag pCi dRV -tGf -wex -avl -puK +bZg +kcH +kcH +kcH kcH kcH kcH @@ -98214,8 +98894,8 @@ aES aES aES aES -aES -lDN +gpe +uEv gpe xEF xEF @@ -98416,9 +99096,9 @@ ceK sxD bhJ bHG -ayP aES -xuB +aES +mtE gpe cEg hgm @@ -100456,7 +101136,7 @@ ils ajZ aaa aaa -bdH +aaa bdH bdH bdH @@ -100659,7 +101339,7 @@ xEF ajZ aaa aaa -bdH +aaa bdH bdH bdH @@ -100862,7 +101542,7 @@ aag ajZ aaa aaa -bdH +aaa bdH bdH bdH @@ -101065,7 +101745,7 @@ aag ajZ aaa aaa -bdH +aaa bdH bdH bdH @@ -101423,8 +102103,8 @@ pCi ifR jMt gpY -awW -awW +uBi +wYA awW awW awW @@ -101460,8 +102140,8 @@ baw oxu baw baw -baw -baw +oaK +nUn pgD xuB gpe @@ -101626,7 +102306,7 @@ pCi avl lIh gpY -aeX +uac vFw ajf ajf @@ -101664,7 +102344,7 @@ aZz aZz aZz wUP -cxk +lrF pgD uEv gpe @@ -101833,8 +102513,8 @@ mto acW awW awW -awW -awW +oGC +oGC aSJ goj iff @@ -102025,7 +102705,7 @@ adq aeW ajD anM -awW +oGC add aSA bvb @@ -102034,8 +102714,8 @@ ajI pYu awW acW -ads add +ryG ohB aiX awd @@ -102066,9 +102746,9 @@ ecr ecr ygs aET -oGC +nUv +aJU aJU -mYx sgU baw dqb @@ -102225,7 +102905,7 @@ bdH bdH abs adq -aeX +aea ajE awW awW @@ -102245,7 +102925,7 @@ unT kng fDV aiX -wWC +aiX tAL awX tAL @@ -102649,7 +103329,7 @@ aoI weD fdE amh -fdE +amh aiX cJu pXx @@ -102850,15 +103530,15 @@ afr akc buc weD -amh +jMm pcG iFn qnD -amd -amd +amh +kWT wUR wUR -amd +wWC auZ aiX aiX @@ -103037,7 +103717,7 @@ bdH aaC abs adq -aeY +qcq ajI add add @@ -103058,10 +103738,10 @@ aiX aiX aiX oqw -amd +lvA osT cZV -amd +pQV apq ana aiX @@ -103095,7 +103775,7 @@ gjq aJU aJU tiW -usm +eMn pgD tQV aaC @@ -103240,13 +103920,13 @@ bdH aaC abs adq -lvA +jWH ajI add auJ aHU aTm -aea +awW aTm jgF auJ @@ -103260,17 +103940,17 @@ fdE mLz iFn alw -amd +amh dGr rtY fJy xQg -apq +wWC szO aiX atU amO -avj +qLj awF awF aEW @@ -103292,13 +103972,13 @@ aJU lqZ ouQ iun -aJU +baw vPm qys lqZ aJU tiW -kWT +pUe pgD tQV aaC @@ -103383,7 +104063,7 @@ baI baI bGO bHB -btO +uAb bcm mzo sYC @@ -103466,18 +104146,18 @@ aiX amd dXY fmB -fmB -dXY -apq +umS +yjM +qbO aqw -aiX -atV +hnI +bYe amO -avj -agm +wZM +aPm awF aHk -rvA +vGI aLp awF jss @@ -103487,7 +104167,7 @@ aVk ldC vkb aET -gnv +eFM yhI tTu sgU @@ -103586,7 +104266,7 @@ bEN baX bcp bHB -aYt +xAY aYz mzo vhq @@ -103652,7 +104332,7 @@ awW avc aIv aTm -bvd +kJL cbM jzZ sLo @@ -103669,18 +104349,18 @@ aiX apt sCI pWN -pWN +uTN aqy nBE pOD bZa ahM aEf -avj -ahF +wZM +ejp awF aHn -rvA +szU aLt awF aRC @@ -103698,7 +104378,7 @@ baw hJk yac vbB -dav +kUQ vbB fDS iLd @@ -103789,7 +104469,7 @@ wqh xyw bcc bHB -aYt +xAY aYz mzo xIj @@ -103855,7 +104535,7 @@ add auJ aHU aTm -bzz +awW aTm jgF auJ @@ -103870,16 +104550,16 @@ aiX aiX aiX awq -amd -amd +lvA +pQV mHO aiX aiX -mJL aiX -ayT +aiX +atV amO -avj +oXd qFl qFl qFl @@ -103893,7 +104573,7 @@ prE aUw aUw awS -aJU +nJs aJU aJU tiW @@ -103901,8 +104581,8 @@ aJU lqZ ouQ vbB -fvu -vbB +baw +tBq qys lqZ aJU @@ -103992,7 +104672,7 @@ bEO rOc fVz bHB -btO +uII ruz mzo gwm @@ -104072,15 +104752,15 @@ fdE feS iFn alw -amd -amd -amd -amd +kFe +mJL +qbO +wbu aiX aKG amb -bZg -bYe +aiX +ayT amO avj qFl @@ -104119,15 +104799,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -104195,7 +104875,7 @@ gfW gfW xyw bHB -btO +uII wrT mzo pVu @@ -104275,11 +104955,11 @@ nwL amh nPx aiX -pQV +aiX uOJ pqc -amd -aiX +pqc +aqz aKH and aiX @@ -104302,8 +104982,8 @@ awS tvQ yhI tTu -gVF -qLj +sgU +baw aJU aJU aJU @@ -104322,15 +105002,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -104398,7 +105078,7 @@ bEP gfW bGQ bHB -btO +qnd cmp cmp cmp @@ -104478,10 +105158,10 @@ akv eGH qnl aiX -aiX -aiX -aiX -amd +fuz +pLW +sht +wex aiX aiX aiX @@ -104525,15 +105205,15 @@ bdH aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -104674,20 +105354,20 @@ awW awW abB add -add -kyY -aau +xWO +aiX +aiX aau aau aau aau uVX ase +sht +uOJ aqz -amd -aqz -ase -atS +mBe +atT aiX ayU amO @@ -104705,8 +105385,8 @@ pUJ pUJ pUJ pUJ -ryG -aJU +pgD +nUv aJU pIV baw @@ -104728,15 +105408,15 @@ bdH aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -104855,9 +105535,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bdH +bdH +bdH aaa aaa aaa @@ -104877,17 +105557,17 @@ awW awW acW qdQ -eFT -hhA +muq +aiX +aiX aau dBs dBs -dBs aau fuz tld -aiX -ccc +uOJ +mHO aiX asf atT @@ -104906,13 +105586,13 @@ bsO aal xKW aht -aGP -pUJ -mSi -wHp +aht +gcc +pgD +lza gZw -sgU -baw +gVF +kuk baw aJU nig @@ -104928,18 +105608,18 @@ tQV aaa bdH bdH -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -105058,9 +105738,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bdH +bdH +bdH aaa aaa aaa @@ -105070,26 +105750,26 @@ adq awW awW awW -awW -add +oGC +ryG aVL bBl aeZ -pzy -awW +ryG +oGC awW acW -ads add -ohB +bny +aiX +aiX aiX -vwV vwV vwV aiX aiX aiX -aiX +sHM kUh aiX aiX @@ -105109,16 +105789,16 @@ pUJ pUJ pUJ pUJ -aGQ pUJ -oGC +ymi +pgD +nUv aJU -mYx sgU baw baw aJU -tTu +bnZ cIe jez aJU @@ -105131,18 +105811,18 @@ tQV aaa aaa bdH -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -105261,41 +105941,41 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bdH +bdH +bdH aaa aaa aaa aaa abs adq -aeZ +aei aka -aoI +aWn aar aar aar aar -tiM aar -teB +aar +oGC awW acW awW awW awW fSm -aSJ +atW apl bbL bbL kij bbL -bbL -bbL -yfv bYe +bYe +yfv +bbL aWl bbL bbL @@ -105312,8 +105992,8 @@ bbL kij bbL xRU -pgo -baw +pEY +jsP baw fGg baw @@ -105326,26 +106006,26 @@ qVM qVM qVM qVM -gnv +hXV yhI -tTu +rRz pgD tQV aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -105464,32 +106144,32 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bdH +bdH +bdH aaa aaa aaa aaa abs adq -afp -akc +apr +apr aoV aar -aIx -aWs -aar -aap +aIZ +aIZ +aIZ +bWK aar -uac -awW +aea +oGC xjD ajf ajf ajf -ajf oAO +heH aod qgG amC @@ -105513,42 +106193,42 @@ suV bYc bYc bYc -biT +qgG dqN tFW dGC -tAV -tAV -tAV -avZ -iYr +aZz +aZz +aZz +nsc +baw cxk qVM -csz -qVM -eRR +iBt +iBt +iBt vce qVM -crh -csI -qhb +wTy +wTy +wTy pgD tQV aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -105667,31 +106347,31 @@ aaa aaa aaa aaa +bdH +bdH +bdH aaa aaa aaa aaa -aaa -aaa -aaa -abw -aea -awW -akt -awW -avd -awW -awW +abs +adq +aub +akc +euO aar -wFm +aIZ +aIZ +aIZ +aIZ aar -uBi -awW -awW -awW +oGC +sHp +oGC awW awW awW +aSJ tsv dtM aii @@ -105716,42 +106396,42 @@ avn mTb avn nFr -asS +aii ajC dCD -baw +aXe baw baw baw mnA -rKs -aJU -xWF -csz -xWF -aJU baw -aJU -baw -sMM baw -wiz -trb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qVM +iBt +iBt +iBt +iBt +qVM +crh +csI +nqG +pgD +tQV aaa aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -105870,25 +106550,25 @@ aaa aaa aaa aaa +bdH +bdH +bdH aaa aaa aaa aaa -aaa -aaa -aaa -abw +abs aec -awW +avd akt awW -add -aIB -awW -aar -ceu -aar +qHq +aIZ +aIZ +aIZ +aIZ aar +rKs aar aar aar @@ -105919,42 +106599,42 @@ aoe aoe aoe aEI -asS +aii aik qVM -aWm -aWm -aWm -aWm qVM -yji qVM qVM -dux qVM -baw -vFb -aJU +qVM +xeG +qVM +qVM +iBt +iBt +iBt +iBt +eOM baw sMM -baw +xVF dLz -trb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +tQV aaa aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aab aaa @@ -106073,23 +106753,23 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bdH +bdH +bdH aaa aaa aaa aaa abs adq -aeZ +aGP aka -aoI -ads -add aWu aar -aao +aIZ +aIZ +aIZ +aIZ aar uLW tZe @@ -106122,38 +106802,38 @@ isN cnZ aoe dtM -asS +aii ajC qVM -aWn -baw -baw -uTY -qVM -mOb -qVM -qVM +gKS +gKS +csz +xCX +csz +vGk +vGk qVM +iBt +iBt +iBt +iBt qVM -uGz -aJU -mYx -gnv +hWB yhI -tTu +qSX pgD tQV aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa @@ -106276,24 +106956,24 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bdH +bdH +bdH aaa aaa aaa aaa abs adq -afr +aGQ akc apg -avx -add -aYq aar -aao -aao +aIZ +aIZ +aIZ +aIZ +aar aao aap ijU @@ -106325,38 +107005,38 @@ aEi coa aoe ahr -biV -ajC +akU +bYe +xCX +csz +vGk +vGk qVM -aub -uId -qHq -wYA +bDe +csz +csz qVM -pDm -tDA -qFQ -oGy +iBt +iBt +iBt +iBt qVM -aJU -aJU -pEY wvj csI -goL +iPH pgD tQV aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa @@ -106486,16 +107166,16 @@ aaa aaa aaa aaa -abw +abs aee -awW +avd akt -awW -add -aJJ -awW +qWI +aar +aar +aar +aar aar -aap lYA lYA lYA @@ -106528,7 +107208,7 @@ aEi fFh aoe dtM -biV +akU ajC czu czu @@ -106539,27 +107219,27 @@ czu czu czu czu -mov qVM -baw -baw -aJU +qVM +qVM +qVM +qVM ehj irS ilJ njD -trb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +tQV aaa aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa @@ -106689,16 +107369,16 @@ aaa aaa aaa aaa -abw -aei -awW -akt -awW -add -awW -awW +abs +adq +aWm +aka +kyY aar -wFm +cit +ina +nuY +nuY lYA aax aax @@ -106731,7 +107411,7 @@ hFF aoe aoe dtM -asS +aii ajC czu aiJ @@ -106742,27 +107422,27 @@ atj atj atj czu -wKn +foR +usi +vGk +foR qVM -uvS -oWz -aJU rQW -xWO -baw -aJU -trb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +yhI +tmI +pgD +tQV aaa aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa @@ -106894,14 +107574,14 @@ aaa aaa abs adq -afA -aka +apr +apr apr aar aJL aYr -aar -aap +aao +aao lYA aax aax @@ -106934,7 +107614,7 @@ aQz aRJ ajl dtM -biV +akU ajC czu aiJ @@ -106945,14 +107625,14 @@ atj atj atj czu -wKn -qVM -nUv -qga +usi +vGk +vGk +vLv qVM -kDt wTy -pwG +wTy +wTy pgD tQV aaa @@ -107102,9 +107782,9 @@ akW apu aar aar -aar -aar -tiM +aao +aap +pDm lYA acV acV @@ -107137,7 +107817,7 @@ aQz aRK ajl aDk -biV +akU ajC czu aiJ @@ -107148,14 +107828,14 @@ atl atl atl czu -wKn -qVM -gMA +dQE +vGk +csz qVM qVM -vpn +crh csI -goL +qhb pgD tQV bdH @@ -107300,14 +107980,14 @@ aaf aaf acv aez -aJW -aJW -boL boL +akY boL -aYs +aiH +aiv +aap uoS -aJW +pDm lYA adb adb @@ -107340,7 +108020,7 @@ fOL aRS ajl ahq -asS +aii ajC czu alW @@ -107351,11 +108031,11 @@ atI atI atI czu -mOb -qVM -vGk -qVM -ina +usi +foR +csz +xCX +aJU baw sMM baw @@ -107503,14 +108183,14 @@ aag aag acv aez -agh -afY -apF -apF -apF -agP -agh -aJW +boL +akY +wrQ +aar +aar +aar +aar +aar lYA adb adb @@ -107543,7 +108223,7 @@ akw alD vEx bYe -biV +akU ajC czu alW @@ -107554,12 +108234,12 @@ atI atI atI czu -mOb qVM -vGk qVM -teg -baw +qVM +qVM +qVM +nTH sMM baw teg @@ -107706,13 +108386,13 @@ aag aag acf aet -agv -afY -ahp -afY -afY -afY -bLO +agS +aiP +aYq +aar +aIZ +aIZ +aIZ bWK lYA adb @@ -107746,7 +108426,7 @@ onQ alD ajl hon -biV +akU ajC czu alW @@ -107757,10 +108437,10 @@ atI atI atI czu -ekY -qVM -csz -qVM +iBt +iBt +iBt +vce qVM gnv yhI @@ -107910,13 +108590,13 @@ aag acf aet agB -akY -akY -akY -agP -afY -bLO -ceC +akW +aYs +aar +aIZ +aIZ +aIZ +aIZ lYA vKF adb @@ -107949,7 +108629,7 @@ aCp alD ajl wqA -asS +aii ajC czu alW @@ -107960,10 +108640,10 @@ atI atI xMk czu -wKn -xCX -hoX -qVM +iBt +iBt +iBt +iBt qVM vpn csI @@ -108112,14 +108792,14 @@ aag aag acv aez -agP +boL akY -aqi +boL avJ -afY -ahl -bLO -bWK +aIZ +aIZ +aIZ +aIZ lYA adb adb @@ -108152,7 +108832,7 @@ akx alD gWG dtM -asS +aii ajC czu alW @@ -108163,11 +108843,11 @@ atI atI atI czu -wKn -qVM -csz -qVM -wiz +iBt +iBt +iBt +iBt +qxz baw sMM baw @@ -108315,14 +108995,14 @@ aag aag acv aez -afY +boL akY aqk -avV -afY -afY -bLO -cit +aar +aIZ +aIZ +aIZ +aIZ lYA adb adb @@ -108355,7 +109035,7 @@ akx alD gWG dtM -asS +aii ajC czu alW @@ -108366,12 +109046,12 @@ atI atI atI czu -mOb -qVM -vGk +iBt +iBt +iBt +iBt qVM -fwD -baw +xuY sMM baw oby @@ -108519,13 +109199,13 @@ aag acf aet agS -akY -akY -akY -afY -agP -bLO -ceC +aiP +aYq +aar +aIZ +aIZ +aIZ +aIZ lYA adb adb @@ -108558,7 +109238,7 @@ hVz alD ajl ahr -asS +aii ajC czu alW @@ -108569,10 +109249,10 @@ atI atI atI czu -mOb -qVM -vGk -qVM +iBt +iBt +iBt +iBt qVM gnv yhI @@ -108721,14 +109401,14 @@ aag aag acf aet -ahl -afY -afY -afY -afY -afY -bLO -bWK +afB +akW +biT +aar +aar +aar +aar +aar lYA adc adc @@ -108761,7 +109441,7 @@ nMV vIf ajl aEI -biV +akU gMa czu czu @@ -108772,9 +109452,9 @@ adc adc adc czu -yji qVM -gMA +qVM +qVM qVM qVM crh @@ -108924,16 +109604,16 @@ aag aag acv aez -agh -ahp -afY +boL +boL +boL ahl -agh -ahp -afY -aJW +cWv +cWv +cWv +cWv kaj -aww +uId adH adH fMA @@ -108964,7 +109644,7 @@ aos alE bVE bYe -biV +akU aGd aWl hJu @@ -108973,12 +109653,12 @@ atC aAa aww aww -aww +wst axs -bBC +bbL bbL bYe -yfv +bbL bit baw baw @@ -109127,16 +109807,16 @@ aag aag acv aez -ahp -agh -arc -arc -arc -afY -agh -aJW +boL +asS +boL +ceu +boL +boL +boL +boL kGL -azY +uTY azY azY azY @@ -109168,17 +109848,17 @@ aSb aEe ait bjJ -aZE -aZE -aZE -aZE -xwG -agl -agl -agl -agl -sHp -wta +abx +abx +abx +abx +atC +azY +azY +azY +fad +kGL +abg abg abg abg @@ -109330,18 +110010,18 @@ aah aah acf acf -aJW +boL ale bDD nub -bDD -ale -aJW +dux +iYr +dux ado +atC kHT avn avn -avn mTb atC avn @@ -109379,8 +110059,8 @@ atC mTb avn avn -avn -avn +aim +atC avn bYe cre @@ -109533,14 +110213,14 @@ aaa aaa aaa lYA -aar -aar -aar -aar -tiM -aar -tiM -aar +aet +aet +biV +biV +ekY +aet +ekY +aet abE abE abE @@ -109735,15 +110415,15 @@ aaa aaa aaa aaa -lYA -ahs +ahx +aiH alf arp -aar -aap -aao -aap -aar +arp +aiH +aiH +aiH +aet kPB aci aci @@ -109938,15 +110618,15 @@ aaa aaa aaa aaa -lYA -ahu +ahx +aiH alg -arp -aar -aap -aao -aap -aar +bBC +bBC +aIx +aIB +aiH +aet kPZ acI acj @@ -110142,14 +110822,14 @@ aaa aaa aaa lYA -ahx -aap +aet +avx ahN -aar -awJ -aao +uli +uli +uli bWf -aar +aet lwC aTT acl @@ -110345,14 +111025,14 @@ aaa aaa aaa lYA -ahy -aap -aao -aar -pmn -aao -bWj -aar +aet +avV +uli +uli +uli +mov +bWq +aet lhX aXc acl @@ -110534,28 +111214,28 @@ aab aaa aaa aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -lYA -fZF -alr -aao -sMs -aao -aao +ahx +aez +uli +aIx +uli +uli +mov bWq -aar +aet lhX eYM uuR @@ -110737,28 +111417,28 @@ aab aaa aaa aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -lYA -aar -aar -aar -aar -aap -aao -aap -aar +ahx +aez +uli +uli +uli +uli +uli +aiH +aet lhX acl acl @@ -110940,28 +111620,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa lYA -aao -aao -acD -aao -aap -aao -aap -aar +ahy +avZ +ipK +ipK +ipK +uli +bWf +aet lhX acl acl @@ -111143,28 +111823,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa lYA -aao -aar -aar -aar -aar -aar -aao -aar +aet +aIx +ipK +ceC +eRR +uli +bWq +aet loV acK acm @@ -111346,28 +112026,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa lYA -aap -aar -aru +aet +uli +ipK awe -fZF -aar -aap -aar +fwD +uli +oGy +aet lhX acl acl @@ -111549,28 +112229,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH aaa aaa aaa lYA -wFm -aar -ary -awh +aet +avx ipK -aar -wFm -aar +ipK +ipK +uli +bWq +aet lhX acl acl @@ -111587,7 +112267,7 @@ vOy aID gLc mKx -mKx +iit kZV vOy vOy @@ -111752,28 +112432,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH aaa aaa -lYA -aap -sMs -ahN -aap -aKc -aar -aap -aar +ahx +aez +uli +uli +uli +uli +uli +oWz +aet lhX gsZ uxO @@ -111790,7 +112470,7 @@ vOy aMd pGK pRX -pRX +mHD pRX vOy jFf @@ -111955,28 +112635,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH aaa -lYA -uaZ -aar -arI -ahg +ahx +aez +aIB +aKg uli -aar -aap -aar +uli +mov +bWq +aet lhX kNO acl @@ -111992,7 +112672,7 @@ avj vOy aMg aSo -mHD +pRX mHD tzL vOy @@ -112158,28 +112838,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH aaa aaa lYA -ahN -aar -aar -aar -aar -aar -aao -aar +aet +aJJ +aIB +uli +uli +mov +bWq +aet lwC tIK acl @@ -112196,7 +112876,7 @@ vOy aQZ bkT pRX -pRX +mHD pRX vOy foP @@ -112361,28 +113041,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH aaa aaa lYA -cIU -aao -sMs -aao +aet +avx +ahN +aIB aKg -aYM -aao -aar +uli +bWf +aet abK acL acn @@ -112399,7 +113079,7 @@ vOy dVd lea hKl -mKx +lDN kZV vOy vOy @@ -112564,28 +113244,28 @@ aab aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH aaa aaa -lYA -ahW -aao -aar -aao -aap -aap -aap -sMs +ahx +aiH +uli +bLO +bLO +bLO +bLO +aiH +qga eAU eAU eAU @@ -112628,7 +113308,7 @@ bqo aRD aGt byp -uTN +aGt awE vGk qVM @@ -112767,8 +113447,8 @@ aab aaa aaa aaa -aaa -aaa +bdH +bdH aaa aaa aaa @@ -112780,15 +113460,15 @@ aaa bdH aaa aaa -lYA +ahx aiH -aao -aar +aiH +bWd awi -aao -aao -aao -aar +bWd +mOb +aiH +aet aBD acU uPr @@ -112984,10 +113664,10 @@ bdH aaa aaa lYA -aiP -aao aar -awJ +tiM +aar +aar aNi aNi bWr @@ -113189,8 +113869,8 @@ aaa lYA aiS aao -aar aao +acD aNi cYT aNm @@ -113392,7 +114072,7 @@ aaa lYA aiT aap -aar +aao aap aNi aZe @@ -113595,7 +114275,7 @@ aaa lYA aiU aap -aar +aap aap aNi aZr @@ -113798,8 +114478,8 @@ aaa lYA aiZ aap -aar -tQE +aao +aap aNi aZs aNm @@ -114001,7 +114681,7 @@ aaa lYA adf aao -aar +aao aao aNi jWr @@ -114203,9 +114883,9 @@ aaa aaa lYA fZF -aao +aWs aar -aao +tiM aNi aNi aNi @@ -114406,7 +115086,7 @@ aaa aaa lYA aar -tiM +aar aar awJ bzE @@ -114812,7 +115492,7 @@ aam aam aam lYA -aao +qsd aap aar aar @@ -114853,7 +115533,7 @@ akU jHG qVM qVM -xeG +qVM qVM qVM qVM @@ -115056,8 +115736,8 @@ akU avj qVM nNA -vGk -csz +ekO +nNA qVM iBt iBt @@ -115257,10 +115937,10 @@ vOy ayT aii avj -qVM -har +ltK vGk -hoX +hDv +ghW qVM iBt iBt @@ -115460,10 +116140,10 @@ vOy ayT aii avj -qVM -csz -vGk -csz +ltK +wYj +jhY +fqx qVM iBt iBt @@ -115663,8 +116343,8 @@ vOy aEK aSv ioX -qVM -pzQ +ltK +nXF vGk bqG qVM @@ -115868,7 +116548,7 @@ akV atL qVM qVM -xeG +nWc qVM qVM qVM @@ -116649,7 +117329,7 @@ abg caF aar aar -aar +tiM aar aar ael @@ -116659,8 +117339,8 @@ aih ael tnl amO -abg anc +atC apJ apJ aMl @@ -116674,8 +117354,8 @@ apJ aMl apJ apJ +atC cnv -abg amO lqJ qVM @@ -116684,7 +117364,7 @@ xeG qVM qVM qVM -qVM +xeG qVM qVM qVM @@ -116851,9 +117531,9 @@ bWs abg caF aar -aIZ -aIZ -aIZ +nuY +sTB +uaZ bUA ael afE @@ -116863,7 +117543,7 @@ ael cZm akU abg -abg +atC abg abx abx @@ -116877,7 +117557,7 @@ abx abx abx avD -abg +atC abg amO nQx @@ -116886,9 +117566,9 @@ usi csz usi qVM -iBt -iBt -iBt +xfh +vGk +vGk adI qVM acG @@ -117054,10 +117734,10 @@ acO aJs cbN aar -aIZ -aIZ -aIZ -aIZ +sTB +aap +aao +vFb ael afH agV @@ -117065,8 +117745,8 @@ ain ael eGl aii -abg anf +atC apK anf apK @@ -117080,19 +117760,19 @@ aDp apK cbr apK +atC cbr -abg amO -abg +uGt qVM qVM vGk har qVM -iBt -iBt -iBt -iBt +xHG +csz +vGk +xHG qVM aJd aJs @@ -117256,11 +117936,11 @@ aba pNQ abx hTy -bWd -aIZ -aIZ -aIZ -aIZ +aar +teB +aao +aao +wta ael afI agY @@ -117268,7 +117948,7 @@ oxi xfm als ani -aow +anc mOi mOi mOi @@ -117284,19 +117964,19 @@ aHq aHq aHq aHq -abg +iWN ajt -abg +kGI aPm qVM vGk -hoX +csz +xCX +vGk +vGk +vGk +csz qVM -iBt -iBt -iBt -iBt -nuY jSY abx hLO @@ -117458,12 +118138,12 @@ aIZ aar acP bUE -cbO +qFQ aar -aIZ -aIZ -aIZ -aIZ +aao +aap +aao +sTB ael afJ agY @@ -117471,7 +118151,7 @@ aiq ajJ aEX ajt -ali +aow mOi rCw rCw @@ -117489,18 +118169,18 @@ bti aHq sDC ajt -abg +kGI ejp qVM vGk -csz +hoX qVM -iBt -iBt -iBt -iBt +xHG +csz +vGk +csz qVM -acP +sah bUE cbO qVM @@ -117663,10 +118343,10 @@ acG abx caF aar -aIZ -aIZ -aIZ -aIZ +aap +aap +aao +sTB ael afK ahc @@ -117674,7 +118354,7 @@ air ael isW ajt -abg +ali mOi wCT sIf @@ -117692,16 +118372,16 @@ rUy cnS iWN ajt -abg +nYv qVM qVM vGk pzQ qVM -iBt -iBt -iBt -iBt +usi +vzl +vGk +csz qVM acG abx @@ -117866,10 +118546,10 @@ oPD abx lCz aar -aar -aar -aar -aar +tAV +sTB +uvS +wKn ael afL ahe @@ -117895,7 +118575,7 @@ dxv cnS cnv ajt -anf +bYe xCX csz csz @@ -117903,7 +118583,7 @@ dWm qVM qVM qVM -qVM +xeG qVM qVM oPD @@ -118069,10 +118749,10 @@ acG abx caF aar -aIZ -aIZ -aIZ -bUA +tiM +aar +aar +aar adO adO adO @@ -118104,10 +118784,10 @@ qVM qVM qVM qVM -iBt -iBt -iBt -adI +xfh +xWF +vGk +yji qVM acG abx @@ -118272,10 +118952,10 @@ acO aJs arJ aar -aIZ -aIZ -aIZ -aIZ +aao +aao +uGz +uGz adO afM fpR @@ -118307,10 +118987,10 @@ aXx jKI aXx qVM -iBt -iBt -iBt -iBt +usi +csz +vGk +csz qVM acO aJs @@ -118474,11 +119154,11 @@ bWh jSY abx hTy -xHG -aIZ -aIZ -aIZ -aIZ +aar +wFm +tQE +aao +sTB adO afN ahh @@ -118510,11 +119190,11 @@ oyE mMP mMP qVM -iBt -iBt -iBt -iBt -xfh +vGk +csz +vGk +csz +qVM jSY abx hLO @@ -118676,12 +119356,12 @@ aIZ aar acP bUE -cbO +qFQ aar -aIZ -aIZ -aIZ -aIZ +aap +aap +aao +fZF adO afO ahh @@ -118713,12 +119393,12 @@ sIA gSj aXA qVM -iBt -iBt -iBt -iBt +vGk +csz +vGk +xHG qVM -acP +sah bUE cbO qVM @@ -118881,10 +119561,10 @@ aJa abg ccf aar -aIZ -aIZ -aIZ -aIZ +tDA +aao +aap +fZF adO jkj ahh @@ -118916,10 +119596,10 @@ ckK iKM aHM qVM -iBt -iBt -iBt -iBt +vGk +csz +yji +uso qVM aJa abg @@ -119086,7 +119766,7 @@ kOG aar aar aar -aar +tiM aar aar lFt @@ -119119,7 +119799,7 @@ dbv lII aWc qVM -qVM +xeG qVM qVM qVM @@ -119190,8 +119870,8 @@ aQL mJP bSn aQL -aLG -aNO +vHs +ehH aYZ sLE bAV @@ -119217,8 +119897,8 @@ bCB cbv iEb bHY -bHa -buH +mru +syP bJC jSp lAQ @@ -119290,7 +119970,7 @@ aiv ahg aap aap -aap +aao rfg aiw ahh @@ -119393,8 +120073,8 @@ aTw aUj kLk aQL -aWN -aLG +mTn +aiy aYZ sLE bbk @@ -119420,8 +120100,8 @@ bdk bGh iEb bHY -buH -fBx +njy +hkE bJC ojF bNG @@ -119597,7 +120277,7 @@ aQL aQL aQL aQL -aLG +uQn aYZ sLE bbl @@ -119623,7 +120303,7 @@ bdl bGi iEb bHY -buH +oyy bJC bJC bJC @@ -120500,8 +121180,8 @@ aeC asV ayn atr -bbV -atr +aeA +aex ciw asV aeC @@ -120547,8 +121227,8 @@ kkx vcE mMu iMx -bXe -jMm +tGi +lJY bXe eyG mMu @@ -120906,7 +121586,7 @@ aeA atp ayR atr -bbZ +eGb atr cji nqV @@ -120954,7 +121634,7 @@ lJY hlX umh bXe -kFe +lxT tGi pfH wlF @@ -121103,13 +121783,13 @@ aaa bdH abh acx -aeC +umR ajs aeC asV ayn atr -aeC +aeA bXz ciw asV @@ -121157,13 +121837,13 @@ vcE mMu iMx bXe -yjM -bXe +lJY +mzF eyG mMu vcE kUV -vcE +pPF rRq uOi bdH @@ -122120,7 +122800,7 @@ abh abh abh abh -nPX +aeC atr aeC atr @@ -122176,7 +122856,7 @@ vcE bXe vcE bXe -sYn +vcE uOi uOi uOi @@ -122323,7 +123003,7 @@ aad aag aag abh -qbO +aeC atr aeC atr @@ -122379,7 +123059,7 @@ vcE bXe vcE bXe -sht +vcE uOi aag aag @@ -122564,7 +123244,7 @@ fDG alL alG aYD -wyK +aTS qgK tEB uBM @@ -123659,8 +124339,8 @@ aQL aQL aLG aYO -aLG -jJs +kBK +hyt bdl tFS bdj @@ -123680,8 +124360,8 @@ jaR mJa wWP rsK -pJJ -buH +aGc +kkE iEb bIT bJC @@ -123862,7 +124542,7 @@ bES kcl aLG aYO -aLG +sou bAX bdl wIr @@ -123884,7 +124564,7 @@ bdl bdl bdl dhU -buH +vzq iEb bIT hNw @@ -125371,7 +126051,7 @@ pVZ xlX psm psm -jFX +ahX psm psm fnZ @@ -125491,7 +126171,7 @@ kFY jmK bDL bbs -iit +ccQ bCN rbF vub @@ -133294,7 +133974,7 @@ aaa aaa uMc iKc -iVY +uiG cMN trB nVX diff --git a/maps/templates/clf_ert_station.dmm b/maps/templates/clf_ert_station.dmm index 9d6ccd92aaa0..7347be914da2 100644 --- a/maps/templates/clf_ert_station.dmm +++ b/maps/templates/clf_ert_station.dmm @@ -1658,7 +1658,7 @@ name = "CLF Outpost"; phone_category = "CLF"; phone_id = "CLF Outpost"; - callable = 0; + do_not_disturb = 2; pixel_y = 10 }, /turf/open/floor/wood, diff --git a/maps/templates/upp_ert_station.dmm b/maps/templates/upp_ert_station.dmm index d78a900f2c59..ae2a8ad40c47 100644 --- a/maps/templates/upp_ert_station.dmm +++ b/maps/templates/upp_ert_station.dmm @@ -880,7 +880,7 @@ name = "UPP Station"; phone_category = "UPP"; phone_id = "UPP Station"; - callable = 0 + do_not_disturb = 2 }, /turf/open/floor/strata{ icon_state = "floor2" diff --git a/maps/templates/weyland_ert_station.dmm b/maps/templates/weyland_ert_station.dmm index 414eee0bcbc7..1937aa6a61a9 100644 --- a/maps/templates/weyland_ert_station.dmm +++ b/maps/templates/weyland_ert_station.dmm @@ -2795,7 +2795,7 @@ "Js" = ( /obj/structure/surface/table/reinforced/black, /obj/structure/transmitter/rotary{ - callable = 0; + do_not_disturb = 2; name = "Weyland-Yutani Station CiC"; phone_category = "W-Y"; phone_id = "W-Y Station CiC" @@ -3588,7 +3588,7 @@ "SE" = ( /obj/structure/surface/table/woodentable/fancy, /obj/structure/transmitter/rotary{ - callable = 0; + do_not_disturb = 2; name = "Weyland-Yutani Station Meeting Room"; phone_category = "W-Y"; phone_id = "W-Y Station Meeting Room" diff --git a/nano/templates/clan_menu.tmpl b/nano/templates/clan_menu.tmpl index 98ac3057a10a..cd987e9079f6 100644 --- a/nano/templates/clan_menu.tmpl +++ b/nano/templates/clan_menu.tmpl @@ -46,7 +46,7 @@ } #clan_list { - border-collapse: collapse; + border-collapse: collapse; width: 100%; } @@ -76,9 +76,6 @@

{{:data.clan_name}}

{{:data.clan_description}}
- {{if data.clan_honor != null}} -

Honor: {{:data.clan_honor}}

- {{/if}} {{if data.player_rename_clan}} @@ -111,7 +108,6 @@ - {{if data.player_modify_ranks}} {{/if}} @@ -128,7 +124,6 @@ - {{if data.player_rank_pos > keys.rank_pos}} {{if data.player_modify_ranks}} @@ -142,4 +137,4 @@ {{/if}} {{/props}} -
Name RankHonor {{:keys.name}} {{:keys.rank}}{{:keys.honor}}
{{:helper.link('Set Rank', '', { 'clan_target_href' : keys.player_id, 'clan_action': 'modifyrank' })}}
\ No newline at end of file + diff --git a/sound/piano/A#1.ogg b/sound/piano/A#1.ogg deleted file mode 100644 index ae41c0a189b1..000000000000 Binary files a/sound/piano/A#1.ogg and /dev/null differ diff --git a/sound/piano/A#2.ogg b/sound/piano/A#2.ogg deleted file mode 100644 index c35ce012b3ee..000000000000 Binary files a/sound/piano/A#2.ogg and /dev/null differ diff --git a/sound/piano/A#3.ogg b/sound/piano/A#3.ogg deleted file mode 100644 index 9ea8795bcf31..000000000000 Binary files a/sound/piano/A#3.ogg and /dev/null differ diff --git a/sound/piano/A#4.ogg b/sound/piano/A#4.ogg deleted file mode 100644 index aeb41ce1a722..000000000000 Binary files a/sound/piano/A#4.ogg and /dev/null differ diff --git a/sound/piano/A#5.ogg b/sound/piano/A#5.ogg deleted file mode 100644 index eca721384308..000000000000 Binary files a/sound/piano/A#5.ogg and /dev/null differ diff --git a/sound/piano/A#6.ogg b/sound/piano/A#6.ogg deleted file mode 100644 index 0ae9e89b0c28..000000000000 Binary files a/sound/piano/A#6.ogg and /dev/null differ diff --git a/sound/piano/A#7.ogg b/sound/piano/A#7.ogg deleted file mode 100644 index e1b469da8164..000000000000 Binary files a/sound/piano/A#7.ogg and /dev/null differ diff --git a/sound/piano/A#8.ogg b/sound/piano/A#8.ogg deleted file mode 100644 index 83bd263e9804..000000000000 Binary files a/sound/piano/A#8.ogg and /dev/null differ diff --git a/sound/piano/Ab1.ogg b/sound/piano/Ab1.ogg deleted file mode 100644 index 1f67015756c2..000000000000 Binary files a/sound/piano/Ab1.ogg and /dev/null differ diff --git a/sound/piano/Ab2.ogg b/sound/piano/Ab2.ogg deleted file mode 100644 index 985bfd608212..000000000000 Binary files a/sound/piano/Ab2.ogg and /dev/null differ diff --git a/sound/piano/Ab3.ogg b/sound/piano/Ab3.ogg deleted file mode 100644 index 5dbcb2d7c634..000000000000 Binary files a/sound/piano/Ab3.ogg and /dev/null differ diff --git a/sound/piano/Ab4.ogg b/sound/piano/Ab4.ogg deleted file mode 100644 index 01add48a44ad..000000000000 Binary files a/sound/piano/Ab4.ogg and /dev/null differ diff --git a/sound/piano/Ab5.ogg b/sound/piano/Ab5.ogg deleted file mode 100644 index 6fbe70844dc3..000000000000 Binary files a/sound/piano/Ab5.ogg and /dev/null differ diff --git a/sound/piano/Ab6.ogg b/sound/piano/Ab6.ogg deleted file mode 100644 index 82b5a84e6824..000000000000 Binary files a/sound/piano/Ab6.ogg and /dev/null differ diff --git a/sound/piano/Ab7.ogg b/sound/piano/Ab7.ogg deleted file mode 100644 index 391b1c1185af..000000000000 Binary files a/sound/piano/Ab7.ogg and /dev/null differ diff --git a/sound/piano/Ab8.ogg b/sound/piano/Ab8.ogg deleted file mode 100644 index aa83b7aaab90..000000000000 Binary files a/sound/piano/Ab8.ogg and /dev/null differ diff --git a/sound/piano/An1.ogg b/sound/piano/An1.ogg deleted file mode 100644 index 4a87d59adac5..000000000000 Binary files a/sound/piano/An1.ogg and /dev/null differ diff --git a/sound/piano/An2.ogg b/sound/piano/An2.ogg deleted file mode 100644 index f5327d0d7cf1..000000000000 Binary files a/sound/piano/An2.ogg and /dev/null differ diff --git a/sound/piano/An3.ogg b/sound/piano/An3.ogg deleted file mode 100644 index 7c3e8a031e80..000000000000 Binary files a/sound/piano/An3.ogg and /dev/null differ diff --git a/sound/piano/An4.ogg b/sound/piano/An4.ogg deleted file mode 100644 index 2ba84a58a6e3..000000000000 Binary files a/sound/piano/An4.ogg and /dev/null differ diff --git a/sound/piano/An5.ogg b/sound/piano/An5.ogg deleted file mode 100644 index 5e04fc8c7fbc..000000000000 Binary files a/sound/piano/An5.ogg and /dev/null differ diff --git a/sound/piano/An6.ogg b/sound/piano/An6.ogg deleted file mode 100644 index 48b639d77f2d..000000000000 Binary files a/sound/piano/An6.ogg and /dev/null differ diff --git a/sound/piano/An7.ogg b/sound/piano/An7.ogg deleted file mode 100644 index 5d93800f28a6..000000000000 Binary files a/sound/piano/An7.ogg and /dev/null differ diff --git a/sound/piano/An8.ogg b/sound/piano/An8.ogg deleted file mode 100644 index e01acd4e7e13..000000000000 Binary files a/sound/piano/An8.ogg and /dev/null differ diff --git a/sound/piano/B#1.ogg b/sound/piano/B#1.ogg deleted file mode 100644 index bcdd2bfd4a1c..000000000000 Binary files a/sound/piano/B#1.ogg and /dev/null differ diff --git a/sound/piano/B#2.ogg b/sound/piano/B#2.ogg deleted file mode 100644 index 0effb061b460..000000000000 Binary files a/sound/piano/B#2.ogg and /dev/null differ diff --git a/sound/piano/B#3.ogg b/sound/piano/B#3.ogg deleted file mode 100644 index 64f390516fc3..000000000000 Binary files a/sound/piano/B#3.ogg and /dev/null differ diff --git a/sound/piano/B#4.ogg b/sound/piano/B#4.ogg deleted file mode 100644 index a423bbb83d21..000000000000 Binary files a/sound/piano/B#4.ogg and /dev/null differ diff --git a/sound/piano/B#5.ogg b/sound/piano/B#5.ogg deleted file mode 100644 index 9a63a927fd08..000000000000 Binary files a/sound/piano/B#5.ogg and /dev/null differ diff --git a/sound/piano/B#6.ogg b/sound/piano/B#6.ogg deleted file mode 100644 index be35faabf563..000000000000 Binary files a/sound/piano/B#6.ogg and /dev/null differ diff --git a/sound/piano/B#7.ogg b/sound/piano/B#7.ogg deleted file mode 100644 index cbb2ad3bc152..000000000000 Binary files a/sound/piano/B#7.ogg and /dev/null differ diff --git a/sound/piano/B#8.ogg b/sound/piano/B#8.ogg deleted file mode 100644 index 5297b755a356..000000000000 Binary files a/sound/piano/B#8.ogg and /dev/null differ diff --git a/sound/piano/Bb1.ogg b/sound/piano/Bb1.ogg deleted file mode 100644 index 617f36454115..000000000000 Binary files a/sound/piano/Bb1.ogg and /dev/null differ diff --git a/sound/piano/Bb2.ogg b/sound/piano/Bb2.ogg deleted file mode 100644 index eb4215daa4c1..000000000000 Binary files a/sound/piano/Bb2.ogg and /dev/null differ diff --git a/sound/piano/Bb3.ogg b/sound/piano/Bb3.ogg deleted file mode 100644 index 35f7eb53d47c..000000000000 Binary files a/sound/piano/Bb3.ogg and /dev/null differ diff --git a/sound/piano/Bb4.ogg b/sound/piano/Bb4.ogg deleted file mode 100644 index 1eef7b921392..000000000000 Binary files a/sound/piano/Bb4.ogg and /dev/null differ diff --git a/sound/piano/Bb5.ogg b/sound/piano/Bb5.ogg deleted file mode 100644 index 118867fd1468..000000000000 Binary files a/sound/piano/Bb5.ogg and /dev/null differ diff --git a/sound/piano/Bb6.ogg b/sound/piano/Bb6.ogg deleted file mode 100644 index 700b2c5abd7f..000000000000 Binary files a/sound/piano/Bb6.ogg and /dev/null differ diff --git a/sound/piano/Bb7.ogg b/sound/piano/Bb7.ogg deleted file mode 100644 index c50955bf01c3..000000000000 Binary files a/sound/piano/Bb7.ogg and /dev/null differ diff --git a/sound/piano/Bb8.ogg b/sound/piano/Bb8.ogg deleted file mode 100644 index b076c4b4e2be..000000000000 Binary files a/sound/piano/Bb8.ogg and /dev/null differ diff --git a/sound/piano/Bn1.ogg b/sound/piano/Bn1.ogg deleted file mode 100644 index 256534881c18..000000000000 Binary files a/sound/piano/Bn1.ogg and /dev/null differ diff --git a/sound/piano/Bn2.ogg b/sound/piano/Bn2.ogg deleted file mode 100644 index 8ed87aa49e77..000000000000 Binary files a/sound/piano/Bn2.ogg and /dev/null differ diff --git a/sound/piano/Bn3.ogg b/sound/piano/Bn3.ogg deleted file mode 100644 index 19788aad716c..000000000000 Binary files a/sound/piano/Bn3.ogg and /dev/null differ diff --git a/sound/piano/Bn4.ogg b/sound/piano/Bn4.ogg deleted file mode 100644 index 773f5b3bd3bf..000000000000 Binary files a/sound/piano/Bn4.ogg and /dev/null differ diff --git a/sound/piano/Bn5.ogg b/sound/piano/Bn5.ogg deleted file mode 100644 index 3297fab1d597..000000000000 Binary files a/sound/piano/Bn5.ogg and /dev/null differ diff --git a/sound/piano/Bn6.ogg b/sound/piano/Bn6.ogg deleted file mode 100644 index 35a39b20f66a..000000000000 Binary files a/sound/piano/Bn6.ogg and /dev/null differ diff --git a/sound/piano/Bn7.ogg b/sound/piano/Bn7.ogg deleted file mode 100644 index e7a8ba403430..000000000000 Binary files a/sound/piano/Bn7.ogg and /dev/null differ diff --git a/sound/piano/Bn8.ogg b/sound/piano/Bn8.ogg deleted file mode 100644 index 2c821e818539..000000000000 Binary files a/sound/piano/Bn8.ogg and /dev/null differ diff --git a/sound/piano/C#1.ogg b/sound/piano/C#1.ogg deleted file mode 100644 index be3d7e3e3081..000000000000 Binary files a/sound/piano/C#1.ogg and /dev/null differ diff --git a/sound/piano/C#2.ogg b/sound/piano/C#2.ogg deleted file mode 100644 index cefe3a745dc0..000000000000 Binary files a/sound/piano/C#2.ogg and /dev/null differ diff --git a/sound/piano/C#3.ogg b/sound/piano/C#3.ogg deleted file mode 100644 index dc3d0878475f..000000000000 Binary files a/sound/piano/C#3.ogg and /dev/null differ diff --git a/sound/piano/C#4.ogg b/sound/piano/C#4.ogg deleted file mode 100644 index c31a44bdf6dd..000000000000 Binary files a/sound/piano/C#4.ogg and /dev/null differ diff --git a/sound/piano/C#5.ogg b/sound/piano/C#5.ogg deleted file mode 100644 index c5d10d13764d..000000000000 Binary files a/sound/piano/C#5.ogg and /dev/null differ diff --git a/sound/piano/C#6.ogg b/sound/piano/C#6.ogg deleted file mode 100644 index a084a04de146..000000000000 Binary files a/sound/piano/C#6.ogg and /dev/null differ diff --git a/sound/piano/C#7.ogg b/sound/piano/C#7.ogg deleted file mode 100644 index 6da255f5aea0..000000000000 Binary files a/sound/piano/C#7.ogg and /dev/null differ diff --git a/sound/piano/C#8.ogg b/sound/piano/C#8.ogg deleted file mode 100644 index b4d4cbe41579..000000000000 Binary files a/sound/piano/C#8.ogg and /dev/null differ diff --git a/sound/piano/Cb2.ogg b/sound/piano/Cb2.ogg deleted file mode 100644 index cefff94c1465..000000000000 Binary files a/sound/piano/Cb2.ogg and /dev/null differ diff --git a/sound/piano/Cb3.ogg b/sound/piano/Cb3.ogg deleted file mode 100644 index 0425228ee726..000000000000 Binary files a/sound/piano/Cb3.ogg and /dev/null differ diff --git a/sound/piano/Cb4.ogg b/sound/piano/Cb4.ogg deleted file mode 100644 index e9c8ad22e94b..000000000000 Binary files a/sound/piano/Cb4.ogg and /dev/null differ diff --git a/sound/piano/Cb5.ogg b/sound/piano/Cb5.ogg deleted file mode 100644 index 611c8ef9e42e..000000000000 Binary files a/sound/piano/Cb5.ogg and /dev/null differ diff --git a/sound/piano/Cb6.ogg b/sound/piano/Cb6.ogg deleted file mode 100644 index 3fe79c61ef92..000000000000 Binary files a/sound/piano/Cb6.ogg and /dev/null differ diff --git a/sound/piano/Cb7.ogg b/sound/piano/Cb7.ogg deleted file mode 100644 index ff6a3fb00726..000000000000 Binary files a/sound/piano/Cb7.ogg and /dev/null differ diff --git a/sound/piano/Cb8.ogg b/sound/piano/Cb8.ogg deleted file mode 100644 index 8ff3d57fe907..000000000000 Binary files a/sound/piano/Cb8.ogg and /dev/null differ diff --git a/sound/piano/Cb9.ogg b/sound/piano/Cb9.ogg deleted file mode 100644 index fa2a3de7a777..000000000000 Binary files a/sound/piano/Cb9.ogg and /dev/null differ diff --git a/sound/piano/Cn1.ogg b/sound/piano/Cn1.ogg deleted file mode 100644 index 86fba1381012..000000000000 Binary files a/sound/piano/Cn1.ogg and /dev/null differ diff --git a/sound/piano/Cn2.ogg b/sound/piano/Cn2.ogg deleted file mode 100644 index e069259e8507..000000000000 Binary files a/sound/piano/Cn2.ogg and /dev/null differ diff --git a/sound/piano/Cn3.ogg b/sound/piano/Cn3.ogg deleted file mode 100644 index 01f5bcde7c5d..000000000000 Binary files a/sound/piano/Cn3.ogg and /dev/null differ diff --git a/sound/piano/Cn4.ogg b/sound/piano/Cn4.ogg deleted file mode 100644 index 2545ccb996b9..000000000000 Binary files a/sound/piano/Cn4.ogg and /dev/null differ diff --git a/sound/piano/Cn5.ogg b/sound/piano/Cn5.ogg deleted file mode 100644 index 601fd5340b37..000000000000 Binary files a/sound/piano/Cn5.ogg and /dev/null differ diff --git a/sound/piano/Cn6.ogg b/sound/piano/Cn6.ogg deleted file mode 100644 index f89c2c78f3af..000000000000 Binary files a/sound/piano/Cn6.ogg and /dev/null differ diff --git a/sound/piano/Cn7.ogg b/sound/piano/Cn7.ogg deleted file mode 100644 index 09723616a74c..000000000000 Binary files a/sound/piano/Cn7.ogg and /dev/null differ diff --git a/sound/piano/Cn8.ogg b/sound/piano/Cn8.ogg deleted file mode 100644 index 4c7e2b44c6fc..000000000000 Binary files a/sound/piano/Cn8.ogg and /dev/null differ diff --git a/sound/piano/Cn9.ogg b/sound/piano/Cn9.ogg deleted file mode 100644 index 2b6812d62b24..000000000000 Binary files a/sound/piano/Cn9.ogg and /dev/null differ diff --git a/sound/piano/D#1.ogg b/sound/piano/D#1.ogg deleted file mode 100644 index d772320b150d..000000000000 Binary files a/sound/piano/D#1.ogg and /dev/null differ diff --git a/sound/piano/D#2.ogg b/sound/piano/D#2.ogg deleted file mode 100644 index ae9d529e907c..000000000000 Binary files a/sound/piano/D#2.ogg and /dev/null differ diff --git a/sound/piano/D#3.ogg b/sound/piano/D#3.ogg deleted file mode 100644 index 63fc4fdd5953..000000000000 Binary files a/sound/piano/D#3.ogg and /dev/null differ diff --git a/sound/piano/D#4.ogg b/sound/piano/D#4.ogg deleted file mode 100644 index 39cf1adbca97..000000000000 Binary files a/sound/piano/D#4.ogg and /dev/null differ diff --git a/sound/piano/D#5.ogg b/sound/piano/D#5.ogg deleted file mode 100644 index 071a57544aee..000000000000 Binary files a/sound/piano/D#5.ogg and /dev/null differ diff --git a/sound/piano/D#6.ogg b/sound/piano/D#6.ogg deleted file mode 100644 index 7ee1bd4bfa07..000000000000 Binary files a/sound/piano/D#6.ogg and /dev/null differ diff --git a/sound/piano/D#7.ogg b/sound/piano/D#7.ogg deleted file mode 100644 index 19f72532dde6..000000000000 Binary files a/sound/piano/D#7.ogg and /dev/null differ diff --git a/sound/piano/D#8.ogg b/sound/piano/D#8.ogg deleted file mode 100644 index ee87d875bd40..000000000000 Binary files a/sound/piano/D#8.ogg and /dev/null differ diff --git a/sound/piano/Db1.ogg b/sound/piano/Db1.ogg deleted file mode 100644 index 9166b7335552..000000000000 Binary files a/sound/piano/Db1.ogg and /dev/null differ diff --git a/sound/piano/Db2.ogg b/sound/piano/Db2.ogg deleted file mode 100644 index 623acd0ec54f..000000000000 Binary files a/sound/piano/Db2.ogg and /dev/null differ diff --git a/sound/piano/Db3.ogg b/sound/piano/Db3.ogg deleted file mode 100644 index 5c8943b4da9f..000000000000 Binary files a/sound/piano/Db3.ogg and /dev/null differ diff --git a/sound/piano/Db4.ogg b/sound/piano/Db4.ogg deleted file mode 100644 index 2deb5b8d9173..000000000000 Binary files a/sound/piano/Db4.ogg and /dev/null differ diff --git a/sound/piano/Db5.ogg b/sound/piano/Db5.ogg deleted file mode 100644 index 9c77ee37a7d8..000000000000 Binary files a/sound/piano/Db5.ogg and /dev/null differ diff --git a/sound/piano/Db6.ogg b/sound/piano/Db6.ogg deleted file mode 100644 index 49e1e04dff84..000000000000 Binary files a/sound/piano/Db6.ogg and /dev/null differ diff --git a/sound/piano/Db7.ogg b/sound/piano/Db7.ogg deleted file mode 100644 index b53fd2f27e03..000000000000 Binary files a/sound/piano/Db7.ogg and /dev/null differ diff --git a/sound/piano/Db8.ogg b/sound/piano/Db8.ogg deleted file mode 100644 index af6cfdffad62..000000000000 Binary files a/sound/piano/Db8.ogg and /dev/null differ diff --git a/sound/piano/Dn1.ogg b/sound/piano/Dn1.ogg deleted file mode 100644 index c6dd20cb65b4..000000000000 Binary files a/sound/piano/Dn1.ogg and /dev/null differ diff --git a/sound/piano/Dn2.ogg b/sound/piano/Dn2.ogg deleted file mode 100644 index 0783087dc658..000000000000 Binary files a/sound/piano/Dn2.ogg and /dev/null differ diff --git a/sound/piano/Dn3.ogg b/sound/piano/Dn3.ogg deleted file mode 100644 index bf7bd97ad137..000000000000 Binary files a/sound/piano/Dn3.ogg and /dev/null differ diff --git a/sound/piano/Dn4.ogg b/sound/piano/Dn4.ogg deleted file mode 100644 index e35a6af447e8..000000000000 Binary files a/sound/piano/Dn4.ogg and /dev/null differ diff --git a/sound/piano/Dn5.ogg b/sound/piano/Dn5.ogg deleted file mode 100644 index 7e355266c0f5..000000000000 Binary files a/sound/piano/Dn5.ogg and /dev/null differ diff --git a/sound/piano/Dn6.ogg b/sound/piano/Dn6.ogg deleted file mode 100644 index 5da94c15adf2..000000000000 Binary files a/sound/piano/Dn6.ogg and /dev/null differ diff --git a/sound/piano/Dn7.ogg b/sound/piano/Dn7.ogg deleted file mode 100644 index ac43398ece62..000000000000 Binary files a/sound/piano/Dn7.ogg and /dev/null differ diff --git a/sound/piano/Dn8.ogg b/sound/piano/Dn8.ogg deleted file mode 100644 index 534e51e72013..000000000000 Binary files a/sound/piano/Dn8.ogg and /dev/null differ diff --git a/sound/piano/E#1.ogg b/sound/piano/E#1.ogg deleted file mode 100644 index 46fd3d50c91b..000000000000 Binary files a/sound/piano/E#1.ogg and /dev/null differ diff --git a/sound/piano/E#2.ogg b/sound/piano/E#2.ogg deleted file mode 100644 index eece0448208d..000000000000 Binary files a/sound/piano/E#2.ogg and /dev/null differ diff --git a/sound/piano/E#3.ogg b/sound/piano/E#3.ogg deleted file mode 100644 index d5acee8dfa7f..000000000000 Binary files a/sound/piano/E#3.ogg and /dev/null differ diff --git a/sound/piano/E#4.ogg b/sound/piano/E#4.ogg deleted file mode 100644 index 3e75fccc91b9..000000000000 Binary files a/sound/piano/E#4.ogg and /dev/null differ diff --git a/sound/piano/E#5.ogg b/sound/piano/E#5.ogg deleted file mode 100644 index cc91527d0ea0..000000000000 Binary files a/sound/piano/E#5.ogg and /dev/null differ diff --git a/sound/piano/E#6.ogg b/sound/piano/E#6.ogg deleted file mode 100644 index 476edd68e22a..000000000000 Binary files a/sound/piano/E#6.ogg and /dev/null differ diff --git a/sound/piano/E#7.ogg b/sound/piano/E#7.ogg deleted file mode 100644 index 7c77c6971ee2..000000000000 Binary files a/sound/piano/E#7.ogg and /dev/null differ diff --git a/sound/piano/E#8.ogg b/sound/piano/E#8.ogg deleted file mode 100644 index 61a55478dc95..000000000000 Binary files a/sound/piano/E#8.ogg and /dev/null differ diff --git a/sound/piano/Eb1.ogg b/sound/piano/Eb1.ogg deleted file mode 100644 index 745c448a4f1f..000000000000 Binary files a/sound/piano/Eb1.ogg and /dev/null differ diff --git a/sound/piano/Eb2.ogg b/sound/piano/Eb2.ogg deleted file mode 100644 index 85fc213e8214..000000000000 Binary files a/sound/piano/Eb2.ogg and /dev/null differ diff --git a/sound/piano/Eb3.ogg b/sound/piano/Eb3.ogg deleted file mode 100644 index 66c673310bb6..000000000000 Binary files a/sound/piano/Eb3.ogg and /dev/null differ diff --git a/sound/piano/Eb4.ogg b/sound/piano/Eb4.ogg deleted file mode 100644 index bff7248310b8..000000000000 Binary files a/sound/piano/Eb4.ogg and /dev/null differ diff --git a/sound/piano/Eb5.ogg b/sound/piano/Eb5.ogg deleted file mode 100644 index 8ecb263ee720..000000000000 Binary files a/sound/piano/Eb5.ogg and /dev/null differ diff --git a/sound/piano/Eb6.ogg b/sound/piano/Eb6.ogg deleted file mode 100644 index 29e62c7a16d8..000000000000 Binary files a/sound/piano/Eb6.ogg and /dev/null differ diff --git a/sound/piano/Eb7.ogg b/sound/piano/Eb7.ogg deleted file mode 100644 index 95e70c0b8cba..000000000000 Binary files a/sound/piano/Eb7.ogg and /dev/null differ diff --git a/sound/piano/Eb8.ogg b/sound/piano/Eb8.ogg deleted file mode 100644 index e421154b62e3..000000000000 Binary files a/sound/piano/Eb8.ogg and /dev/null differ diff --git a/sound/piano/En1.ogg b/sound/piano/En1.ogg deleted file mode 100644 index 32819af46ba5..000000000000 Binary files a/sound/piano/En1.ogg and /dev/null differ diff --git a/sound/piano/En2.ogg b/sound/piano/En2.ogg deleted file mode 100644 index f1931e091425..000000000000 Binary files a/sound/piano/En2.ogg and /dev/null differ diff --git a/sound/piano/En3.ogg b/sound/piano/En3.ogg deleted file mode 100644 index fd9d54a6d03f..000000000000 Binary files a/sound/piano/En3.ogg and /dev/null differ diff --git a/sound/piano/En4.ogg b/sound/piano/En4.ogg deleted file mode 100644 index 41dcf10ff57e..000000000000 Binary files a/sound/piano/En4.ogg and /dev/null differ diff --git a/sound/piano/En5.ogg b/sound/piano/En5.ogg deleted file mode 100644 index 571bb0768e56..000000000000 Binary files a/sound/piano/En5.ogg and /dev/null differ diff --git a/sound/piano/En6.ogg b/sound/piano/En6.ogg deleted file mode 100644 index 7dbf990b1864..000000000000 Binary files a/sound/piano/En6.ogg and /dev/null differ diff --git a/sound/piano/En7.ogg b/sound/piano/En7.ogg deleted file mode 100644 index 0793106be1f4..000000000000 Binary files a/sound/piano/En7.ogg and /dev/null differ diff --git a/sound/piano/En8.ogg b/sound/piano/En8.ogg deleted file mode 100644 index 2989d16d1ded..000000000000 Binary files a/sound/piano/En8.ogg and /dev/null differ diff --git a/sound/piano/F#1.ogg b/sound/piano/F#1.ogg deleted file mode 100644 index f646e20a3385..000000000000 Binary files a/sound/piano/F#1.ogg and /dev/null differ diff --git a/sound/piano/F#2.ogg b/sound/piano/F#2.ogg deleted file mode 100644 index 140c0ab01750..000000000000 Binary files a/sound/piano/F#2.ogg and /dev/null differ diff --git a/sound/piano/F#3.ogg b/sound/piano/F#3.ogg deleted file mode 100644 index 03f74deae5e7..000000000000 Binary files a/sound/piano/F#3.ogg and /dev/null differ diff --git a/sound/piano/F#4.ogg b/sound/piano/F#4.ogg deleted file mode 100644 index 8b6be4a8e83e..000000000000 Binary files a/sound/piano/F#4.ogg and /dev/null differ diff --git a/sound/piano/F#5.ogg b/sound/piano/F#5.ogg deleted file mode 100644 index 2ada429e53c6..000000000000 Binary files a/sound/piano/F#5.ogg and /dev/null differ diff --git a/sound/piano/F#6.ogg b/sound/piano/F#6.ogg deleted file mode 100644 index a3c41995a142..000000000000 Binary files a/sound/piano/F#6.ogg and /dev/null differ diff --git a/sound/piano/F#7.ogg b/sound/piano/F#7.ogg deleted file mode 100644 index 8c87e9c8b7bd..000000000000 Binary files a/sound/piano/F#7.ogg and /dev/null differ diff --git a/sound/piano/F#8.ogg b/sound/piano/F#8.ogg deleted file mode 100644 index 7a20d3cd3d4a..000000000000 Binary files a/sound/piano/F#8.ogg and /dev/null differ diff --git a/sound/piano/Fb1.ogg b/sound/piano/Fb1.ogg deleted file mode 100644 index ba3f5bde8ca0..000000000000 Binary files a/sound/piano/Fb1.ogg and /dev/null differ diff --git a/sound/piano/Fb2.ogg b/sound/piano/Fb2.ogg deleted file mode 100644 index d601261c9218..000000000000 Binary files a/sound/piano/Fb2.ogg and /dev/null differ diff --git a/sound/piano/Fb3.ogg b/sound/piano/Fb3.ogg deleted file mode 100644 index 0c67f09c6e71..000000000000 Binary files a/sound/piano/Fb3.ogg and /dev/null differ diff --git a/sound/piano/Fb4.ogg b/sound/piano/Fb4.ogg deleted file mode 100644 index 6b23e1dca8bc..000000000000 Binary files a/sound/piano/Fb4.ogg and /dev/null differ diff --git a/sound/piano/Fb5.ogg b/sound/piano/Fb5.ogg deleted file mode 100644 index 992fbef3c832..000000000000 Binary files a/sound/piano/Fb5.ogg and /dev/null differ diff --git a/sound/piano/Fb6.ogg b/sound/piano/Fb6.ogg deleted file mode 100644 index 622859f44d54..000000000000 Binary files a/sound/piano/Fb6.ogg and /dev/null differ diff --git a/sound/piano/Fb7.ogg b/sound/piano/Fb7.ogg deleted file mode 100644 index bb44482880ca..000000000000 Binary files a/sound/piano/Fb7.ogg and /dev/null differ diff --git a/sound/piano/Fb8.ogg b/sound/piano/Fb8.ogg deleted file mode 100644 index 940c92efafa5..000000000000 Binary files a/sound/piano/Fb8.ogg and /dev/null differ diff --git a/sound/piano/Fn1.ogg b/sound/piano/Fn1.ogg deleted file mode 100644 index 52a717014860..000000000000 Binary files a/sound/piano/Fn1.ogg and /dev/null differ diff --git a/sound/piano/Fn2.ogg b/sound/piano/Fn2.ogg deleted file mode 100644 index 28770a787229..000000000000 Binary files a/sound/piano/Fn2.ogg and /dev/null differ diff --git a/sound/piano/Fn3.ogg b/sound/piano/Fn3.ogg deleted file mode 100644 index 5db839ab9cbb..000000000000 Binary files a/sound/piano/Fn3.ogg and /dev/null differ diff --git a/sound/piano/Fn4.ogg b/sound/piano/Fn4.ogg deleted file mode 100644 index 5a4437102ae4..000000000000 Binary files a/sound/piano/Fn4.ogg and /dev/null differ diff --git a/sound/piano/Fn5.ogg b/sound/piano/Fn5.ogg deleted file mode 100644 index fb748454480c..000000000000 Binary files a/sound/piano/Fn5.ogg and /dev/null differ diff --git a/sound/piano/Fn6.ogg b/sound/piano/Fn6.ogg deleted file mode 100644 index 3e23b71b1ef5..000000000000 Binary files a/sound/piano/Fn6.ogg and /dev/null differ diff --git a/sound/piano/Fn7.ogg b/sound/piano/Fn7.ogg deleted file mode 100644 index d897ab7c3c8f..000000000000 Binary files a/sound/piano/Fn7.ogg and /dev/null differ diff --git a/sound/piano/Fn8.ogg b/sound/piano/Fn8.ogg deleted file mode 100644 index 3ebf0e9bbc49..000000000000 Binary files a/sound/piano/Fn8.ogg and /dev/null differ diff --git a/sound/piano/G#1.ogg b/sound/piano/G#1.ogg deleted file mode 100644 index 4b559e5583ac..000000000000 Binary files a/sound/piano/G#1.ogg and /dev/null differ diff --git a/sound/piano/G#2.ogg b/sound/piano/G#2.ogg deleted file mode 100644 index d70745db3e76..000000000000 Binary files a/sound/piano/G#2.ogg and /dev/null differ diff --git a/sound/piano/G#3.ogg b/sound/piano/G#3.ogg deleted file mode 100644 index cb69b23a17af..000000000000 Binary files a/sound/piano/G#3.ogg and /dev/null differ diff --git a/sound/piano/G#4.ogg b/sound/piano/G#4.ogg deleted file mode 100644 index fc0965821fc5..000000000000 Binary files a/sound/piano/G#4.ogg and /dev/null differ diff --git a/sound/piano/G#5.ogg b/sound/piano/G#5.ogg deleted file mode 100644 index 845c02160cc9..000000000000 Binary files a/sound/piano/G#5.ogg and /dev/null differ diff --git a/sound/piano/G#6.ogg b/sound/piano/G#6.ogg deleted file mode 100644 index 934f281311c1..000000000000 Binary files a/sound/piano/G#6.ogg and /dev/null differ diff --git a/sound/piano/G#7.ogg b/sound/piano/G#7.ogg deleted file mode 100644 index 0366b7a74b33..000000000000 Binary files a/sound/piano/G#7.ogg and /dev/null differ diff --git a/sound/piano/G#8.ogg b/sound/piano/G#8.ogg deleted file mode 100644 index 5c7f1b3fa57c..000000000000 Binary files a/sound/piano/G#8.ogg and /dev/null differ diff --git a/sound/piano/Gb1.ogg b/sound/piano/Gb1.ogg deleted file mode 100644 index 229e2e5d477e..000000000000 Binary files a/sound/piano/Gb1.ogg and /dev/null differ diff --git a/sound/piano/Gb2.ogg b/sound/piano/Gb2.ogg deleted file mode 100644 index c22963c95b67..000000000000 Binary files a/sound/piano/Gb2.ogg and /dev/null differ diff --git a/sound/piano/Gb3.ogg b/sound/piano/Gb3.ogg deleted file mode 100644 index de273ab8d200..000000000000 Binary files a/sound/piano/Gb3.ogg and /dev/null differ diff --git a/sound/piano/Gb4.ogg b/sound/piano/Gb4.ogg deleted file mode 100644 index 383d7a9212bf..000000000000 Binary files a/sound/piano/Gb4.ogg and /dev/null differ diff --git a/sound/piano/Gb5.ogg b/sound/piano/Gb5.ogg deleted file mode 100644 index e84ca674898a..000000000000 Binary files a/sound/piano/Gb5.ogg and /dev/null differ diff --git a/sound/piano/Gb6.ogg b/sound/piano/Gb6.ogg deleted file mode 100644 index d6171c668f75..000000000000 Binary files a/sound/piano/Gb6.ogg and /dev/null differ diff --git a/sound/piano/Gb7.ogg b/sound/piano/Gb7.ogg deleted file mode 100644 index c47bff993c11..000000000000 Binary files a/sound/piano/Gb7.ogg and /dev/null differ diff --git a/sound/piano/Gb8.ogg b/sound/piano/Gb8.ogg deleted file mode 100644 index bdd5e3396642..000000000000 Binary files a/sound/piano/Gb8.ogg and /dev/null differ diff --git a/sound/piano/Gn1.ogg b/sound/piano/Gn1.ogg deleted file mode 100644 index b78d3f44faa5..000000000000 Binary files a/sound/piano/Gn1.ogg and /dev/null differ diff --git a/sound/piano/Gn2.ogg b/sound/piano/Gn2.ogg deleted file mode 100644 index 4cc8e85d33fd..000000000000 Binary files a/sound/piano/Gn2.ogg and /dev/null differ diff --git a/sound/piano/Gn3.ogg b/sound/piano/Gn3.ogg deleted file mode 100644 index 65a0a83b7e9c..000000000000 Binary files a/sound/piano/Gn3.ogg and /dev/null differ diff --git a/sound/piano/Gn4.ogg b/sound/piano/Gn4.ogg deleted file mode 100644 index ac88f21a5168..000000000000 Binary files a/sound/piano/Gn4.ogg and /dev/null differ diff --git a/sound/piano/Gn5.ogg b/sound/piano/Gn5.ogg deleted file mode 100644 index a2cd6b032cf9..000000000000 Binary files a/sound/piano/Gn5.ogg and /dev/null differ diff --git a/sound/piano/Gn6.ogg b/sound/piano/Gn6.ogg deleted file mode 100644 index 6e22bdeae80c..000000000000 Binary files a/sound/piano/Gn6.ogg and /dev/null differ diff --git a/sound/piano/Gn7.ogg b/sound/piano/Gn7.ogg deleted file mode 100644 index 3c2af2907da7..000000000000 Binary files a/sound/piano/Gn7.ogg and /dev/null differ diff --git a/sound/piano/Gn8.ogg b/sound/piano/Gn8.ogg deleted file mode 100644 index f27b35f10abd..000000000000 Binary files a/sound/piano/Gn8.ogg and /dev/null differ diff --git a/sound/violin/A#1.mid b/sound/violin/A#1.mid deleted file mode 100644 index 693b73f5420f..000000000000 Binary files a/sound/violin/A#1.mid and /dev/null differ diff --git a/sound/violin/A#2.mid b/sound/violin/A#2.mid deleted file mode 100644 index 40da5f3da152..000000000000 Binary files a/sound/violin/A#2.mid and /dev/null differ diff --git a/sound/violin/A#3.mid b/sound/violin/A#3.mid deleted file mode 100644 index 5bab6ccd6362..000000000000 Binary files a/sound/violin/A#3.mid and /dev/null differ diff --git a/sound/violin/A#4.mid b/sound/violin/A#4.mid deleted file mode 100644 index dce830448ef8..000000000000 Binary files a/sound/violin/A#4.mid and /dev/null differ diff --git a/sound/violin/A#5.mid b/sound/violin/A#5.mid deleted file mode 100644 index fda796e27b90..000000000000 Binary files a/sound/violin/A#5.mid and /dev/null differ diff --git a/sound/violin/A#6.mid b/sound/violin/A#6.mid deleted file mode 100644 index 9e5da684f43c..000000000000 Binary files a/sound/violin/A#6.mid and /dev/null differ diff --git a/sound/violin/A#7.mid b/sound/violin/A#7.mid deleted file mode 100644 index 215c56cbe7ee..000000000000 Binary files a/sound/violin/A#7.mid and /dev/null differ diff --git a/sound/violin/A#8.mid b/sound/violin/A#8.mid deleted file mode 100644 index 4b55c34691f7..000000000000 Binary files a/sound/violin/A#8.mid and /dev/null differ diff --git a/sound/violin/Ab1.mid b/sound/violin/Ab1.mid deleted file mode 100644 index b8253364b4e8..000000000000 Binary files a/sound/violin/Ab1.mid and /dev/null differ diff --git a/sound/violin/Ab2.mid b/sound/violin/Ab2.mid deleted file mode 100644 index 4cd7f9b55a7c..000000000000 Binary files a/sound/violin/Ab2.mid and /dev/null differ diff --git a/sound/violin/Ab3.mid b/sound/violin/Ab3.mid deleted file mode 100644 index e827cfc635ee..000000000000 Binary files a/sound/violin/Ab3.mid and /dev/null differ diff --git a/sound/violin/Ab4.mid b/sound/violin/Ab4.mid deleted file mode 100644 index 57e1f76c9761..000000000000 Binary files a/sound/violin/Ab4.mid and /dev/null differ diff --git a/sound/violin/Ab5.mid b/sound/violin/Ab5.mid deleted file mode 100644 index 59e95a6d9974..000000000000 Binary files a/sound/violin/Ab5.mid and /dev/null differ diff --git a/sound/violin/Ab6.mid b/sound/violin/Ab6.mid deleted file mode 100644 index 9bd3436287b9..000000000000 Binary files a/sound/violin/Ab6.mid and /dev/null differ diff --git a/sound/violin/Ab7.mid b/sound/violin/Ab7.mid deleted file mode 100644 index 3c90af807e27..000000000000 Binary files a/sound/violin/Ab7.mid and /dev/null differ diff --git a/sound/violin/Ab8.mid b/sound/violin/Ab8.mid deleted file mode 100644 index 873d771f2aea..000000000000 Binary files a/sound/violin/Ab8.mid and /dev/null differ diff --git a/sound/violin/An1.mid b/sound/violin/An1.mid deleted file mode 100644 index d7f8a001d93f..000000000000 Binary files a/sound/violin/An1.mid and /dev/null differ diff --git a/sound/violin/An2.mid b/sound/violin/An2.mid deleted file mode 100644 index 2f01800a0754..000000000000 Binary files a/sound/violin/An2.mid and /dev/null differ diff --git a/sound/violin/An3.mid b/sound/violin/An3.mid deleted file mode 100644 index c8ed3cdfa6cb..000000000000 Binary files a/sound/violin/An3.mid and /dev/null differ diff --git a/sound/violin/An4.mid b/sound/violin/An4.mid deleted file mode 100644 index e7984ca7e62b..000000000000 Binary files a/sound/violin/An4.mid and /dev/null differ diff --git a/sound/violin/An5.mid b/sound/violin/An5.mid deleted file mode 100644 index e1fd228f7a9e..000000000000 Binary files a/sound/violin/An5.mid and /dev/null differ diff --git a/sound/violin/An6.mid b/sound/violin/An6.mid deleted file mode 100644 index 1c8df6c98e5c..000000000000 Binary files a/sound/violin/An6.mid and /dev/null differ diff --git a/sound/violin/An7.mid b/sound/violin/An7.mid deleted file mode 100644 index 2784428daf9e..000000000000 Binary files a/sound/violin/An7.mid and /dev/null differ diff --git a/sound/violin/An8.mid b/sound/violin/An8.mid deleted file mode 100644 index 2db2ab70a7d9..000000000000 Binary files a/sound/violin/An8.mid and /dev/null differ diff --git a/sound/violin/B#1.mid b/sound/violin/B#1.mid deleted file mode 100644 index d83b176edd8b..000000000000 Binary files a/sound/violin/B#1.mid and /dev/null differ diff --git a/sound/violin/B#2.mid b/sound/violin/B#2.mid deleted file mode 100644 index cddff75625f0..000000000000 Binary files a/sound/violin/B#2.mid and /dev/null differ diff --git a/sound/violin/B#3.mid b/sound/violin/B#3.mid deleted file mode 100644 index 8bd7ec2fa9d6..000000000000 Binary files a/sound/violin/B#3.mid and /dev/null differ diff --git a/sound/violin/B#4.mid b/sound/violin/B#4.mid deleted file mode 100644 index 4c7ab84b57be..000000000000 Binary files a/sound/violin/B#4.mid and /dev/null differ diff --git a/sound/violin/B#5.mid b/sound/violin/B#5.mid deleted file mode 100644 index d7f990b2d6c3..000000000000 Binary files a/sound/violin/B#5.mid and /dev/null differ diff --git a/sound/violin/B#6.mid b/sound/violin/B#6.mid deleted file mode 100644 index e124ccb8e2b0..000000000000 Binary files a/sound/violin/B#6.mid and /dev/null differ diff --git a/sound/violin/B#7.mid b/sound/violin/B#7.mid deleted file mode 100644 index 231c9e428db5..000000000000 Binary files a/sound/violin/B#7.mid and /dev/null differ diff --git a/sound/violin/B#8.mid b/sound/violin/B#8.mid deleted file mode 100644 index 981943c08f0c..000000000000 Binary files a/sound/violin/B#8.mid and /dev/null differ diff --git a/sound/violin/Bb1.mid b/sound/violin/Bb1.mid deleted file mode 100644 index 693b73f5420f..000000000000 Binary files a/sound/violin/Bb1.mid and /dev/null differ diff --git a/sound/violin/Bb2.mid b/sound/violin/Bb2.mid deleted file mode 100644 index 40da5f3da152..000000000000 Binary files a/sound/violin/Bb2.mid and /dev/null differ diff --git a/sound/violin/Bb3.mid b/sound/violin/Bb3.mid deleted file mode 100644 index 5bab6ccd6362..000000000000 Binary files a/sound/violin/Bb3.mid and /dev/null differ diff --git a/sound/violin/Bb4.mid b/sound/violin/Bb4.mid deleted file mode 100644 index dce830448ef8..000000000000 Binary files a/sound/violin/Bb4.mid and /dev/null differ diff --git a/sound/violin/Bb5.mid b/sound/violin/Bb5.mid deleted file mode 100644 index fda796e27b90..000000000000 Binary files a/sound/violin/Bb5.mid and /dev/null differ diff --git a/sound/violin/Bb6.mid b/sound/violin/Bb6.mid deleted file mode 100644 index 9e5da684f43c..000000000000 Binary files a/sound/violin/Bb6.mid and /dev/null differ diff --git a/sound/violin/Bb7.mid b/sound/violin/Bb7.mid deleted file mode 100644 index 215c56cbe7ee..000000000000 Binary files a/sound/violin/Bb7.mid and /dev/null differ diff --git a/sound/violin/Bb8.mid b/sound/violin/Bb8.mid deleted file mode 100644 index 4b55c34691f7..000000000000 Binary files a/sound/violin/Bb8.mid and /dev/null differ diff --git a/sound/violin/Bn1.mid b/sound/violin/Bn1.mid deleted file mode 100644 index 27968b5f9e7d..000000000000 Binary files a/sound/violin/Bn1.mid and /dev/null differ diff --git a/sound/violin/Bn2.mid b/sound/violin/Bn2.mid deleted file mode 100644 index 54c9b99d03fe..000000000000 Binary files a/sound/violin/Bn2.mid and /dev/null differ diff --git a/sound/violin/Bn3.mid b/sound/violin/Bn3.mid deleted file mode 100644 index f73476fb7bb1..000000000000 Binary files a/sound/violin/Bn3.mid and /dev/null differ diff --git a/sound/violin/Bn4.mid b/sound/violin/Bn4.mid deleted file mode 100644 index 2aa30708a6cb..000000000000 Binary files a/sound/violin/Bn4.mid and /dev/null differ diff --git a/sound/violin/Bn5.mid b/sound/violin/Bn5.mid deleted file mode 100644 index 0ebe636b7145..000000000000 Binary files a/sound/violin/Bn5.mid and /dev/null differ diff --git a/sound/violin/Bn6.mid b/sound/violin/Bn6.mid deleted file mode 100644 index 3b8e1c217f7b..000000000000 Binary files a/sound/violin/Bn6.mid and /dev/null differ diff --git a/sound/violin/Bn7.mid b/sound/violin/Bn7.mid deleted file mode 100644 index afcb1982a13f..000000000000 Binary files a/sound/violin/Bn7.mid and /dev/null differ diff --git a/sound/violin/Bn8.mid b/sound/violin/Bn8.mid deleted file mode 100644 index 3afd469256c1..000000000000 Binary files a/sound/violin/Bn8.mid and /dev/null differ diff --git a/sound/violin/C#1.mid b/sound/violin/C#1.mid deleted file mode 100644 index 88dba851452e..000000000000 Binary files a/sound/violin/C#1.mid and /dev/null differ diff --git a/sound/violin/C#2.mid b/sound/violin/C#2.mid deleted file mode 100644 index b510926b45fa..000000000000 Binary files a/sound/violin/C#2.mid and /dev/null differ diff --git a/sound/violin/C#3.mid b/sound/violin/C#3.mid deleted file mode 100644 index 9954bbe478a2..000000000000 Binary files a/sound/violin/C#3.mid and /dev/null differ diff --git a/sound/violin/C#4.mid b/sound/violin/C#4.mid deleted file mode 100644 index 2c5ff74db0aa..000000000000 Binary files a/sound/violin/C#4.mid and /dev/null differ diff --git a/sound/violin/C#5.mid b/sound/violin/C#5.mid deleted file mode 100644 index e5850a3fd041..000000000000 Binary files a/sound/violin/C#5.mid and /dev/null differ diff --git a/sound/violin/C#6.mid b/sound/violin/C#6.mid deleted file mode 100644 index 217c0ad014c5..000000000000 Binary files a/sound/violin/C#6.mid and /dev/null differ diff --git a/sound/violin/C#7.mid b/sound/violin/C#7.mid deleted file mode 100644 index ec32bdbf9040..000000000000 Binary files a/sound/violin/C#7.mid and /dev/null differ diff --git a/sound/violin/C#8.mid b/sound/violin/C#8.mid deleted file mode 100644 index 555bce3db0d8..000000000000 Binary files a/sound/violin/C#8.mid and /dev/null differ diff --git a/sound/violin/Cb1.mid b/sound/violin/Cb1.mid deleted file mode 100644 index a00f09dfb088..000000000000 Binary files a/sound/violin/Cb1.mid and /dev/null differ diff --git a/sound/violin/Cb2.mid b/sound/violin/Cb2.mid deleted file mode 100644 index 4085711bf127..000000000000 Binary files a/sound/violin/Cb2.mid and /dev/null differ diff --git a/sound/violin/Cb3.mid b/sound/violin/Cb3.mid deleted file mode 100644 index f647983ef05c..000000000000 Binary files a/sound/violin/Cb3.mid and /dev/null differ diff --git a/sound/violin/Cb4.mid b/sound/violin/Cb4.mid deleted file mode 100644 index 24f22f09eecc..000000000000 Binary files a/sound/violin/Cb4.mid and /dev/null differ diff --git a/sound/violin/Cb5.mid b/sound/violin/Cb5.mid deleted file mode 100644 index 057e97c5e0d0..000000000000 Binary files a/sound/violin/Cb5.mid and /dev/null differ diff --git a/sound/violin/Cb6.mid b/sound/violin/Cb6.mid deleted file mode 100644 index 887e65fc13d0..000000000000 Binary files a/sound/violin/Cb6.mid and /dev/null differ diff --git a/sound/violin/Cb7.mid b/sound/violin/Cb7.mid deleted file mode 100644 index 99668bc192c2..000000000000 Binary files a/sound/violin/Cb7.mid and /dev/null differ diff --git a/sound/violin/Cb8.mid b/sound/violin/Cb8.mid deleted file mode 100644 index 53ea61d1b250..000000000000 Binary files a/sound/violin/Cb8.mid and /dev/null differ diff --git a/sound/violin/Cb9.mid b/sound/violin/Cb9.mid deleted file mode 100644 index 1e8c3afadf13..000000000000 Binary files a/sound/violin/Cb9.mid and /dev/null differ diff --git a/sound/violin/Cn1.mid b/sound/violin/Cn1.mid deleted file mode 100644 index 857120f31f4e..000000000000 Binary files a/sound/violin/Cn1.mid and /dev/null differ diff --git a/sound/violin/Cn2.mid b/sound/violin/Cn2.mid deleted file mode 100644 index 3ccd6670e873..000000000000 Binary files a/sound/violin/Cn2.mid and /dev/null differ diff --git a/sound/violin/Cn3.mid b/sound/violin/Cn3.mid deleted file mode 100644 index 1851e4f8d27d..000000000000 Binary files a/sound/violin/Cn3.mid and /dev/null differ diff --git a/sound/violin/Cn4.mid b/sound/violin/Cn4.mid deleted file mode 100644 index 65e8b0efe4e5..000000000000 Binary files a/sound/violin/Cn4.mid and /dev/null differ diff --git a/sound/violin/Cn5.mid b/sound/violin/Cn5.mid deleted file mode 100644 index 544f921e43b9..000000000000 Binary files a/sound/violin/Cn5.mid and /dev/null differ diff --git a/sound/violin/Cn6.mid b/sound/violin/Cn6.mid deleted file mode 100644 index 7c78dab2f076..000000000000 Binary files a/sound/violin/Cn6.mid and /dev/null differ diff --git a/sound/violin/Cn7.mid b/sound/violin/Cn7.mid deleted file mode 100644 index 3abe4cde0863..000000000000 Binary files a/sound/violin/Cn7.mid and /dev/null differ diff --git a/sound/violin/Cn8.mid b/sound/violin/Cn8.mid deleted file mode 100644 index 06f14081b3b9..000000000000 Binary files a/sound/violin/Cn8.mid and /dev/null differ diff --git a/sound/violin/Cn9.mid b/sound/violin/Cn9.mid deleted file mode 100644 index 62f4eef045a8..000000000000 Binary files a/sound/violin/Cn9.mid and /dev/null differ diff --git a/sound/violin/D#1.mid b/sound/violin/D#1.mid deleted file mode 100644 index 829e6fcf185a..000000000000 Binary files a/sound/violin/D#1.mid and /dev/null differ diff --git a/sound/violin/D#2.mid b/sound/violin/D#2.mid deleted file mode 100644 index 66029b340cc9..000000000000 Binary files a/sound/violin/D#2.mid and /dev/null differ diff --git a/sound/violin/D#3.mid b/sound/violin/D#3.mid deleted file mode 100644 index c982375941e6..000000000000 Binary files a/sound/violin/D#3.mid and /dev/null differ diff --git a/sound/violin/D#4.mid b/sound/violin/D#4.mid deleted file mode 100644 index 016ed4f1edf9..000000000000 Binary files a/sound/violin/D#4.mid and /dev/null differ diff --git a/sound/violin/D#5.mid b/sound/violin/D#5.mid deleted file mode 100644 index ddb511795df2..000000000000 Binary files a/sound/violin/D#5.mid and /dev/null differ diff --git a/sound/violin/D#6.mid b/sound/violin/D#6.mid deleted file mode 100644 index b7242b9ab994..000000000000 Binary files a/sound/violin/D#6.mid and /dev/null differ diff --git a/sound/violin/D#7.mid b/sound/violin/D#7.mid deleted file mode 100644 index 773538340a56..000000000000 Binary files a/sound/violin/D#7.mid and /dev/null differ diff --git a/sound/violin/D#8.mid b/sound/violin/D#8.mid deleted file mode 100644 index 4ad074e173b7..000000000000 Binary files a/sound/violin/D#8.mid and /dev/null differ diff --git a/sound/violin/Db1.mid b/sound/violin/Db1.mid deleted file mode 100644 index 88dba851452e..000000000000 Binary files a/sound/violin/Db1.mid and /dev/null differ diff --git a/sound/violin/Db2.mid b/sound/violin/Db2.mid deleted file mode 100644 index b510926b45fa..000000000000 Binary files a/sound/violin/Db2.mid and /dev/null differ diff --git a/sound/violin/Db3.mid b/sound/violin/Db3.mid deleted file mode 100644 index 9954bbe478a2..000000000000 Binary files a/sound/violin/Db3.mid and /dev/null differ diff --git a/sound/violin/Db4.mid b/sound/violin/Db4.mid deleted file mode 100644 index 2c5ff74db0aa..000000000000 Binary files a/sound/violin/Db4.mid and /dev/null differ diff --git a/sound/violin/Db5.mid b/sound/violin/Db5.mid deleted file mode 100644 index e5850a3fd041..000000000000 Binary files a/sound/violin/Db5.mid and /dev/null differ diff --git a/sound/violin/Db6.mid b/sound/violin/Db6.mid deleted file mode 100644 index 217c0ad014c5..000000000000 Binary files a/sound/violin/Db6.mid and /dev/null differ diff --git a/sound/violin/Db7.mid b/sound/violin/Db7.mid deleted file mode 100644 index ec32bdbf9040..000000000000 Binary files a/sound/violin/Db7.mid and /dev/null differ diff --git a/sound/violin/Db8.mid b/sound/violin/Db8.mid deleted file mode 100644 index 555bce3db0d8..000000000000 Binary files a/sound/violin/Db8.mid and /dev/null differ diff --git a/sound/violin/Dn1.mid b/sound/violin/Dn1.mid deleted file mode 100644 index 92e4e0d95816..000000000000 Binary files a/sound/violin/Dn1.mid and /dev/null differ diff --git a/sound/violin/Dn2.mid b/sound/violin/Dn2.mid deleted file mode 100644 index 34eb9d1db1ba..000000000000 Binary files a/sound/violin/Dn2.mid and /dev/null differ diff --git a/sound/violin/Dn3.mid b/sound/violin/Dn3.mid deleted file mode 100644 index fbd56085aafa..000000000000 Binary files a/sound/violin/Dn3.mid and /dev/null differ diff --git a/sound/violin/Dn4.mid b/sound/violin/Dn4.mid deleted file mode 100644 index e13c74482921..000000000000 Binary files a/sound/violin/Dn4.mid and /dev/null differ diff --git a/sound/violin/Dn5.mid b/sound/violin/Dn5.mid deleted file mode 100644 index 8fd41e5c6fe0..000000000000 Binary files a/sound/violin/Dn5.mid and /dev/null differ diff --git a/sound/violin/Dn6.mid b/sound/violin/Dn6.mid deleted file mode 100644 index d47329e8f9ed..000000000000 Binary files a/sound/violin/Dn6.mid and /dev/null differ diff --git a/sound/violin/Dn7.mid b/sound/violin/Dn7.mid deleted file mode 100644 index b24966038762..000000000000 Binary files a/sound/violin/Dn7.mid and /dev/null differ diff --git a/sound/violin/Dn8.mid b/sound/violin/Dn8.mid deleted file mode 100644 index 56667a1a86d0..000000000000 Binary files a/sound/violin/Dn8.mid and /dev/null differ diff --git a/sound/violin/E#1.mid b/sound/violin/E#1.mid deleted file mode 100644 index 3f130ee126c1..000000000000 Binary files a/sound/violin/E#1.mid and /dev/null differ diff --git a/sound/violin/E#2.mid b/sound/violin/E#2.mid deleted file mode 100644 index f67c2d0a2673..000000000000 Binary files a/sound/violin/E#2.mid and /dev/null differ diff --git a/sound/violin/E#3.mid b/sound/violin/E#3.mid deleted file mode 100644 index bb393382d6c8..000000000000 Binary files a/sound/violin/E#3.mid and /dev/null differ diff --git a/sound/violin/E#4.mid b/sound/violin/E#4.mid deleted file mode 100644 index a96520c595d3..000000000000 Binary files a/sound/violin/E#4.mid and /dev/null differ diff --git a/sound/violin/E#5.mid b/sound/violin/E#5.mid deleted file mode 100644 index d1378af1972d..000000000000 Binary files a/sound/violin/E#5.mid and /dev/null differ diff --git a/sound/violin/E#6.mid b/sound/violin/E#6.mid deleted file mode 100644 index 7abe40bd8242..000000000000 Binary files a/sound/violin/E#6.mid and /dev/null differ diff --git a/sound/violin/E#7.mid b/sound/violin/E#7.mid deleted file mode 100644 index df278c20d6b6..000000000000 Binary files a/sound/violin/E#7.mid and /dev/null differ diff --git a/sound/violin/E#8.mid b/sound/violin/E#8.mid deleted file mode 100644 index 35254cd5b25b..000000000000 Binary files a/sound/violin/E#8.mid and /dev/null differ diff --git a/sound/violin/Eb1.mid b/sound/violin/Eb1.mid deleted file mode 100644 index 829e6fcf185a..000000000000 Binary files a/sound/violin/Eb1.mid and /dev/null differ diff --git a/sound/violin/Eb2.mid b/sound/violin/Eb2.mid deleted file mode 100644 index 66029b340cc9..000000000000 Binary files a/sound/violin/Eb2.mid and /dev/null differ diff --git a/sound/violin/Eb3.mid b/sound/violin/Eb3.mid deleted file mode 100644 index c982375941e6..000000000000 Binary files a/sound/violin/Eb3.mid and /dev/null differ diff --git a/sound/violin/Eb4.mid b/sound/violin/Eb4.mid deleted file mode 100644 index 016ed4f1edf9..000000000000 Binary files a/sound/violin/Eb4.mid and /dev/null differ diff --git a/sound/violin/Eb5.mid b/sound/violin/Eb5.mid deleted file mode 100644 index ddb511795df2..000000000000 Binary files a/sound/violin/Eb5.mid and /dev/null differ diff --git a/sound/violin/Eb6.mid b/sound/violin/Eb6.mid deleted file mode 100644 index b7242b9ab994..000000000000 Binary files a/sound/violin/Eb6.mid and /dev/null differ diff --git a/sound/violin/Eb7.mid b/sound/violin/Eb7.mid deleted file mode 100644 index 773538340a56..000000000000 Binary files a/sound/violin/Eb7.mid and /dev/null differ diff --git a/sound/violin/Eb8.mid b/sound/violin/Eb8.mid deleted file mode 100644 index 4ad074e173b7..000000000000 Binary files a/sound/violin/Eb8.mid and /dev/null differ diff --git a/sound/violin/En1.mid b/sound/violin/En1.mid deleted file mode 100644 index 79ab68df9df7..000000000000 Binary files a/sound/violin/En1.mid and /dev/null differ diff --git a/sound/violin/En2.mid b/sound/violin/En2.mid deleted file mode 100644 index cd61c8d0de5b..000000000000 Binary files a/sound/violin/En2.mid and /dev/null differ diff --git a/sound/violin/En3.mid b/sound/violin/En3.mid deleted file mode 100644 index da5b703d545b..000000000000 Binary files a/sound/violin/En3.mid and /dev/null differ diff --git a/sound/violin/En4.mid b/sound/violin/En4.mid deleted file mode 100644 index f7d3af024ff2..000000000000 Binary files a/sound/violin/En4.mid and /dev/null differ diff --git a/sound/violin/En5.mid b/sound/violin/En5.mid deleted file mode 100644 index d3d353943f9d..000000000000 Binary files a/sound/violin/En5.mid and /dev/null differ diff --git a/sound/violin/En6.mid b/sound/violin/En6.mid deleted file mode 100644 index 73eb5b0697db..000000000000 Binary files a/sound/violin/En6.mid and /dev/null differ diff --git a/sound/violin/En7.mid b/sound/violin/En7.mid deleted file mode 100644 index 79a9462c844e..000000000000 Binary files a/sound/violin/En7.mid and /dev/null differ diff --git a/sound/violin/En8.mid b/sound/violin/En8.mid deleted file mode 100644 index 88947fc7318e..000000000000 Binary files a/sound/violin/En8.mid and /dev/null differ diff --git a/sound/violin/F#1.mid b/sound/violin/F#1.mid deleted file mode 100644 index d18668e89112..000000000000 Binary files a/sound/violin/F#1.mid and /dev/null differ diff --git a/sound/violin/F#2.mid b/sound/violin/F#2.mid deleted file mode 100644 index 302f0c6fdc15..000000000000 Binary files a/sound/violin/F#2.mid and /dev/null differ diff --git a/sound/violin/F#3.mid b/sound/violin/F#3.mid deleted file mode 100644 index 1f592fc90399..000000000000 Binary files a/sound/violin/F#3.mid and /dev/null differ diff --git a/sound/violin/F#4.mid b/sound/violin/F#4.mid deleted file mode 100644 index 45854126f988..000000000000 Binary files a/sound/violin/F#4.mid and /dev/null differ diff --git a/sound/violin/F#5.mid b/sound/violin/F#5.mid deleted file mode 100644 index fb1e1da339a9..000000000000 Binary files a/sound/violin/F#5.mid and /dev/null differ diff --git a/sound/violin/F#6.mid b/sound/violin/F#6.mid deleted file mode 100644 index bfa896bb7844..000000000000 Binary files a/sound/violin/F#6.mid and /dev/null differ diff --git a/sound/violin/F#7.mid b/sound/violin/F#7.mid deleted file mode 100644 index a27763c1d47d..000000000000 Binary files a/sound/violin/F#7.mid and /dev/null differ diff --git a/sound/violin/F#8.mid b/sound/violin/F#8.mid deleted file mode 100644 index aaab80a72762..000000000000 Binary files a/sound/violin/F#8.mid and /dev/null differ diff --git a/sound/violin/Fb1.mid b/sound/violin/Fb1.mid deleted file mode 100644 index c89b3f36b439..000000000000 Binary files a/sound/violin/Fb1.mid and /dev/null differ diff --git a/sound/violin/Fb2.mid b/sound/violin/Fb2.mid deleted file mode 100644 index 3db6af1aa459..000000000000 Binary files a/sound/violin/Fb2.mid and /dev/null differ diff --git a/sound/violin/Fb3.mid b/sound/violin/Fb3.mid deleted file mode 100644 index 5f601f3ac424..000000000000 Binary files a/sound/violin/Fb3.mid and /dev/null differ diff --git a/sound/violin/Fb4.mid b/sound/violin/Fb4.mid deleted file mode 100644 index f1abc8109d1e..000000000000 Binary files a/sound/violin/Fb4.mid and /dev/null differ diff --git a/sound/violin/Fb5.mid b/sound/violin/Fb5.mid deleted file mode 100644 index 2ec1b2e51283..000000000000 Binary files a/sound/violin/Fb5.mid and /dev/null differ diff --git a/sound/violin/Fb6.mid b/sound/violin/Fb6.mid deleted file mode 100644 index b8bdf7fee071..000000000000 Binary files a/sound/violin/Fb6.mid and /dev/null differ diff --git a/sound/violin/Fb7.mid b/sound/violin/Fb7.mid deleted file mode 100644 index 51f5f1bcdb48..000000000000 Binary files a/sound/violin/Fb7.mid and /dev/null differ diff --git a/sound/violin/Fb8.mid b/sound/violin/Fb8.mid deleted file mode 100644 index 47928f38475c..000000000000 Binary files a/sound/violin/Fb8.mid and /dev/null differ diff --git a/sound/violin/Fn1.mid b/sound/violin/Fn1.mid deleted file mode 100644 index abe0d4e4051b..000000000000 Binary files a/sound/violin/Fn1.mid and /dev/null differ diff --git a/sound/violin/Fn2.mid b/sound/violin/Fn2.mid deleted file mode 100644 index d245bef3b54c..000000000000 Binary files a/sound/violin/Fn2.mid and /dev/null differ diff --git a/sound/violin/Fn3.mid b/sound/violin/Fn3.mid deleted file mode 100644 index e532e30dac9c..000000000000 Binary files a/sound/violin/Fn3.mid and /dev/null differ diff --git a/sound/violin/Fn4.mid b/sound/violin/Fn4.mid deleted file mode 100644 index 47219c72fa2e..000000000000 Binary files a/sound/violin/Fn4.mid and /dev/null differ diff --git a/sound/violin/Fn5.mid b/sound/violin/Fn5.mid deleted file mode 100644 index 630d16371d9e..000000000000 Binary files a/sound/violin/Fn5.mid and /dev/null differ diff --git a/sound/violin/Fn6.mid b/sound/violin/Fn6.mid deleted file mode 100644 index 08cbc981bdb6..000000000000 Binary files a/sound/violin/Fn6.mid and /dev/null differ diff --git a/sound/violin/Fn7.mid b/sound/violin/Fn7.mid deleted file mode 100644 index 6c28c7d272e2..000000000000 Binary files a/sound/violin/Fn7.mid and /dev/null differ diff --git a/sound/violin/Fn8.mid b/sound/violin/Fn8.mid deleted file mode 100644 index 2d73762f269a..000000000000 Binary files a/sound/violin/Fn8.mid and /dev/null differ diff --git a/sound/violin/G#1.mid b/sound/violin/G#1.mid deleted file mode 100644 index b1b38856858c..000000000000 Binary files a/sound/violin/G#1.mid and /dev/null differ diff --git a/sound/violin/G#2.mid b/sound/violin/G#2.mid deleted file mode 100644 index e827cfc635ee..000000000000 Binary files a/sound/violin/G#2.mid and /dev/null differ diff --git a/sound/violin/G#3.mid b/sound/violin/G#3.mid deleted file mode 100644 index 57e1f76c9761..000000000000 Binary files a/sound/violin/G#3.mid and /dev/null differ diff --git a/sound/violin/G#4.mid b/sound/violin/G#4.mid deleted file mode 100644 index 59e95a6d9974..000000000000 Binary files a/sound/violin/G#4.mid and /dev/null differ diff --git a/sound/violin/G#5.mid b/sound/violin/G#5.mid deleted file mode 100644 index 9bd3436287b9..000000000000 Binary files a/sound/violin/G#5.mid and /dev/null differ diff --git a/sound/violin/G#6.mid b/sound/violin/G#6.mid deleted file mode 100644 index 3c90af807e27..000000000000 Binary files a/sound/violin/G#6.mid and /dev/null differ diff --git a/sound/violin/G#7.mid b/sound/violin/G#7.mid deleted file mode 100644 index b51afd323c64..000000000000 Binary files a/sound/violin/G#7.mid and /dev/null differ diff --git a/sound/violin/G#8.mid b/sound/violin/G#8.mid deleted file mode 100644 index d3f5c898d47d..000000000000 Binary files a/sound/violin/G#8.mid and /dev/null differ diff --git a/sound/violin/Gb1.mid b/sound/violin/Gb1.mid deleted file mode 100644 index d18668e89112..000000000000 Binary files a/sound/violin/Gb1.mid and /dev/null differ diff --git a/sound/violin/Gb2.mid b/sound/violin/Gb2.mid deleted file mode 100644 index 302f0c6fdc15..000000000000 Binary files a/sound/violin/Gb2.mid and /dev/null differ diff --git a/sound/violin/Gb3.mid b/sound/violin/Gb3.mid deleted file mode 100644 index 1f592fc90399..000000000000 Binary files a/sound/violin/Gb3.mid and /dev/null differ diff --git a/sound/violin/Gb4.mid b/sound/violin/Gb4.mid deleted file mode 100644 index 45854126f988..000000000000 Binary files a/sound/violin/Gb4.mid and /dev/null differ diff --git a/sound/violin/Gb5.mid b/sound/violin/Gb5.mid deleted file mode 100644 index fb1e1da339a9..000000000000 Binary files a/sound/violin/Gb5.mid and /dev/null differ diff --git a/sound/violin/Gb6.mid b/sound/violin/Gb6.mid deleted file mode 100644 index bfa896bb7844..000000000000 Binary files a/sound/violin/Gb6.mid and /dev/null differ diff --git a/sound/violin/Gb7.mid b/sound/violin/Gb7.mid deleted file mode 100644 index a27763c1d47d..000000000000 Binary files a/sound/violin/Gb7.mid and /dev/null differ diff --git a/sound/violin/Gb8.mid b/sound/violin/Gb8.mid deleted file mode 100644 index aaab80a72762..000000000000 Binary files a/sound/violin/Gb8.mid and /dev/null differ diff --git a/sound/violin/Gn1.mid b/sound/violin/Gn1.mid deleted file mode 100644 index 1df52ab07606..000000000000 Binary files a/sound/violin/Gn1.mid and /dev/null differ diff --git a/sound/violin/Gn2.mid b/sound/violin/Gn2.mid deleted file mode 100644 index 6e0ca3831272..000000000000 Binary files a/sound/violin/Gn2.mid and /dev/null differ diff --git a/sound/violin/Gn3.mid b/sound/violin/Gn3.mid deleted file mode 100644 index bb3e6dedcbf9..000000000000 Binary files a/sound/violin/Gn3.mid and /dev/null differ diff --git a/sound/violin/Gn4.mid b/sound/violin/Gn4.mid deleted file mode 100644 index 0c46432afee5..000000000000 Binary files a/sound/violin/Gn4.mid and /dev/null differ diff --git a/sound/violin/Gn5.mid b/sound/violin/Gn5.mid deleted file mode 100644 index f39dcf5e2b9f..000000000000 Binary files a/sound/violin/Gn5.mid and /dev/null differ diff --git a/sound/violin/Gn6.mid b/sound/violin/Gn6.mid deleted file mode 100644 index 0efa2259ca17..000000000000 Binary files a/sound/violin/Gn6.mid and /dev/null differ diff --git a/sound/violin/Gn7.mid b/sound/violin/Gn7.mid deleted file mode 100644 index 22fd1b6bcb00..000000000000 Binary files a/sound/violin/Gn7.mid and /dev/null differ diff --git a/sound/violin/Gn8.mid b/sound/violin/Gn8.mid deleted file mode 100644 index 16b7171d627c..000000000000 Binary files a/sound/violin/Gn8.mid and /dev/null differ diff --git a/sound/voice/joe/be_careful_with_that.ogg b/sound/voice/joe/be_careful_with_that.ogg new file mode 100644 index 000000000000..14f3ca8c357d Binary files /dev/null and b/sound/voice/joe/be_careful_with_that.ogg differ diff --git a/sound/voice/joe/been_looking_for_you.ogg b/sound/voice/joe/been_looking_for_you.ogg new file mode 100644 index 000000000000..14aa2c9a175d Binary files /dev/null and b/sound/voice/joe/been_looking_for_you.ogg differ diff --git a/sound/voice/joe/calm_down.ogg b/sound/voice/joe/calm_down.ogg new file mode 100644 index 000000000000..dde85ea17457 Binary files /dev/null and b/sound/voice/joe/calm_down.ogg differ diff --git a/sound/voice/joe/come_with_me.ogg b/sound/voice/joe/come_with_me.ogg new file mode 100644 index 000000000000..395c99c3850f Binary files /dev/null and b/sound/voice/joe/come_with_me.ogg differ diff --git a/sound/voice/joe/dont_run.ogg b/sound/voice/joe/dont_run.ogg new file mode 100644 index 000000000000..ce67a355c16b Binary files /dev/null and b/sound/voice/joe/dont_run.ogg differ diff --git a/sound/voice/joe/dontdothat.ogg b/sound/voice/joe/dontdothat.ogg new file mode 100644 index 000000000000..c078a5fdf191 Binary files /dev/null and b/sound/voice/joe/dontdothat.ogg differ diff --git a/sound/voice/joe/enough.ogg b/sound/voice/joe/enough.ogg new file mode 100644 index 000000000000..c6667751adcc Binary files /dev/null and b/sound/voice/joe/enough.ogg differ diff --git a/sound/voice/joe/existing_tasks.ogg b/sound/voice/joe/existing_tasks.ogg new file mode 100644 index 000000000000..2751538790fd Binary files /dev/null and b/sound/voice/joe/existing_tasks.ogg differ diff --git a/sound/voice/joe/expensive_mistake.ogg b/sound/voice/joe/expensive_mistake.ogg new file mode 100644 index 000000000000..cee21b5066b2 Binary files /dev/null and b/sound/voice/joe/expensive_mistake.ogg differ diff --git a/sound/voice/joe/follow_me_please.ogg b/sound/voice/joe/follow_me_please.ogg new file mode 100644 index 000000000000..10ecac4f6b19 Binary files /dev/null and b/sound/voice/joe/follow_me_please.ogg differ diff --git a/sound/voice/joe/glad_we_resolved.ogg b/sound/voice/joe/glad_we_resolved.ogg new file mode 100644 index 000000000000..117e35eff683 Binary files /dev/null and b/sound/voice/joe/glad_we_resolved.ogg differ diff --git a/sound/voice/joe/had_the_pleasure.ogg b/sound/voice/joe/had_the_pleasure.ogg new file mode 100644 index 000000000000..6f8972900290 Binary files /dev/null and b/sound/voice/joe/had_the_pleasure.ogg differ diff --git a/sound/voice/joe/have_a_problem.ogg b/sound/voice/joe/have_a_problem.ogg new file mode 100644 index 000000000000..55781f21c7d2 Binary files /dev/null and b/sound/voice/joe/have_a_problem.ogg differ diff --git a/sound/voice/joe/hold_still.ogg b/sound/voice/joe/hold_still.ogg new file mode 100644 index 000000000000..916c11e04286 Binary files /dev/null and b/sound/voice/joe/hold_still.ogg differ diff --git a/sound/voice/joe/how_are_you.ogg b/sound/voice/joe/how_are_you.ogg new file mode 100644 index 000000000000..49da5e70f93f Binary files /dev/null and b/sound/voice/joe/how_are_you.ogg differ diff --git a/sound/voice/joe/how_inconsiderate.ogg b/sound/voice/joe/how_inconsiderate.ogg new file mode 100644 index 000000000000..acebe30a36d7 Binary files /dev/null and b/sound/voice/joe/how_inconsiderate.ogg differ diff --git a/sound/voice/joe/hurt_yourself.ogg b/sound/voice/joe/hurt_yourself.ogg new file mode 100644 index 000000000000..5a89d8e32865 Binary files /dev/null and b/sound/voice/joe/hurt_yourself.ogg differ diff --git a/sound/voice/joe/interloper.ogg b/sound/voice/joe/interloper.ogg new file mode 100644 index 000000000000..4c4872aa6e52 Binary files /dev/null and b/sound/voice/joe/interloper.ogg differ diff --git a/sound/voice/joe/investigate_weapon.ogg b/sound/voice/joe/investigate_weapon.ogg new file mode 100644 index 000000000000..58aeff07079f Binary files /dev/null and b/sound/voice/joe/investigate_weapon.ogg differ diff --git a/sound/voice/joe/is_anybody_there.ogg b/sound/voice/joe/is_anybody_there.ogg new file mode 100644 index 000000000000..ac59c588a0e6 Binary files /dev/null and b/sound/voice/joe/is_anybody_there.ogg differ diff --git a/sound/voice/joe/let_me_help.ogg b/sound/voice/joe/let_me_help.ogg new file mode 100644 index 000000000000..564654c91a2b Binary files /dev/null and b/sound/voice/joe/let_me_help.ogg differ diff --git a/sound/voice/joe/most_concerning.ogg b/sound/voice/joe/most_concerning.ogg new file mode 100644 index 000000000000..33f9c5afc875 Binary files /dev/null and b/sound/voice/joe/most_concerning.ogg differ diff --git a/sound/voice/joe/no_need.ogg b/sound/voice/joe/no_need.ogg new file mode 100644 index 000000000000..80cf3056efe7 Binary files /dev/null and b/sound/voice/joe/no_need.ogg differ diff --git a/sound/voice/joe/not_be_tolerated.ogg b/sound/voice/joe/not_be_tolerated.ogg new file mode 100644 index 000000000000..bb7451d9608c Binary files /dev/null and b/sound/voice/joe/not_be_tolerated.ogg differ diff --git a/sound/voice/joe/pity.ogg b/sound/voice/joe/pity.ogg new file mode 100644 index 000000000000..1b13b95cdb95 Binary files /dev/null and b/sound/voice/joe/pity.ogg differ diff --git a/sound/voice/joe/protected_area_compromised.ogg b/sound/voice/joe/protected_area_compromised.ogg new file mode 100644 index 000000000000..688dcac5cc95 Binary files /dev/null and b/sound/voice/joe/protected_area_compromised.ogg differ diff --git a/sound/voice/joe/really.ogg b/sound/voice/joe/really.ogg new file mode 100644 index 000000000000..29ba7ae2208b Binary files /dev/null and b/sound/voice/joe/really.ogg differ diff --git a/sound/voice/joe/really_shouldnt_be_here.ogg b/sound/voice/joe/really_shouldnt_be_here.ogg new file mode 100644 index 000000000000..c8bd28004394 Binary files /dev/null and b/sound/voice/joe/really_shouldnt_be_here.ogg differ diff --git a/sound/voice/joe/someone_hurt.ogg b/sound/voice/joe/someone_hurt.ogg new file mode 100644 index 000000000000..014fb45f660f Binary files /dev/null and b/sound/voice/joe/someone_hurt.ogg differ diff --git a/sound/voice/joe/still_here.ogg b/sound/voice/joe/still_here.ogg new file mode 100644 index 000000000000..1f7b2f7c4f76 Binary files /dev/null and b/sound/voice/joe/still_here.ogg differ diff --git a/sound/voice/joe/stop_that.ogg b/sound/voice/joe/stop_that.ogg new file mode 100644 index 000000000000..2e585ff600be Binary files /dev/null and b/sound/voice/joe/stop_that.ogg differ diff --git a/sound/voice/joe/support_ticket_removed.ogg b/sound/voice/joe/support_ticket_removed.ogg new file mode 100644 index 000000000000..3fe68743cdc9 Binary files /dev/null and b/sound/voice/joe/support_ticket_removed.ogg differ diff --git a/sound/voice/joe/this_isnt_the_answer.ogg b/sound/voice/joe/this_isnt_the_answer.ogg new file mode 100644 index 000000000000..0d9603449cc6 Binary files /dev/null and b/sound/voice/joe/this_isnt_the_answer.ogg differ diff --git a/sound/voice/joe/tut_tut.ogg b/sound/voice/joe/tut_tut.ogg new file mode 100644 index 000000000000..a97eb17715cd Binary files /dev/null and b/sound/voice/joe/tut_tut.ogg differ diff --git a/sound/voice/joe/unwarranted.ogg b/sound/voice/joe/unwarranted.ogg new file mode 100644 index 000000000000..faf566ede40a Binary files /dev/null and b/sound/voice/joe/unwarranted.ogg differ diff --git a/sound/voice/joe/weapon_permit.ogg b/sound/voice/joe/weapon_permit.ogg deleted file mode 100644 index 9d22d1d2b163..000000000000 Binary files a/sound/voice/joe/weapon_permit.ogg and /dev/null differ diff --git a/sound/voice/joe/what_do_you_need.ogg b/sound/voice/joe/what_do_you_need.ogg new file mode 100644 index 000000000000..fcce740136c9 Binary files /dev/null and b/sound/voice/joe/what_do_you_need.ogg differ diff --git a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx index 6943c96a79fa..289bb53d777a 100644 --- a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx +++ b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx @@ -317,14 +317,7 @@ const RenderScreen = (props, context) => { return ( <> {data.can_set_automated === 1 && } - {data.can_fly_by === 1 && - (data.shuttle_mode === 'idle' || data.shuttle_mode === 'called') && ( - - )} - {data.shuttle_mode === 'idle' && - data.flight_configuration !== 'flyby' && ( - - )} + {data.shuttle_mode === 'idle' && } {data.shuttle_mode === 'igniting' && } {data.shuttle_mode === 'pre-arrival' && } {data.shuttle_mode === 'recharging' && } diff --git a/tgui/packages/tgui/interfaces/Microwave.tsx b/tgui/packages/tgui/interfaces/Microwave.tsx new file mode 100644 index 000000000000..da16a9f44b49 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Microwave.tsx @@ -0,0 +1,86 @@ +import { useBackend } from '../backend'; +import { Button, NoticeBox, Section, Flex, Box } from '../components'; +import { BooleanLike } from 'common/react'; +import { Window } from '../layouts'; + +type Ingredient = { + name: string; + count: number; + measure: string; +}; + +type BackendContext = { + operating: BooleanLike; + broken: BooleanLike; + dirty: BooleanLike; + ingredients: Ingredient[]; +}; + +export const Microwave = (props, context) => { + const { data, act } = useBackend(context); + const { operating, broken, dirty, ingredients } = data; + + return ( + + +
+ + + + + }> + {!!operating && ( + + Cooking... + + )} + + {!!broken && ( + + Appliance broken. Please contact your local technician. + + )} + + {!!dirty && ( + + This microwave is too dirty. Cleaning required. + + )} + + {!ingredients.length && None} + + + {ingredients.map((ingredient) => { + return ( + + {ingredient.name}: {ingredient.count}{' '} + {ingredient.measure} + + ); + })} + +
+
+
+ ); +}; 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) => {