diff --git a/code/__DEFINES/weapon_stats.dm b/code/__DEFINES/weapon_stats.dm index 1c3c09e9b28d..7313ebf80562 100644 --- a/code/__DEFINES/weapon_stats.dm +++ b/code/__DEFINES/weapon_stats.dm @@ -66,7 +66,7 @@ It DOES NOT control where your bullets go, that's scatter and projectile varianc ////SCATTER//// */ -#define SCATTER_AMOUNT_NEURO 60 +#define SCATTER_AMOUNT_NEURO 45 #define SCATTER_AMOUNT_TIER_1 15 #define SCATTER_AMOUNT_TIER_2 10 #define SCATTER_AMOUNT_TIER_3 8 diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index 291246e621a0..7c6f9046a9b9 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -77,3 +77,23 @@ if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase else return default return . + +/proc/sanitize_gear(list/gear, client/user) + var/list/sanitized_gear = list() + var/running_cost = 0 + + for(var/gear_option in gear) + if(!GLOB.gear_datums_by_name[gear_option]) + continue + + var/datum/gear/gear_datum = GLOB.gear_datums_by_name[gear_option] + var/new_total = running_cost + gear_datum.cost + + if(new_total > MAX_GEAR_COST) + to_chat(user, SPAN_WARNING("Your [gear_option] was removed from your loadout as it exceeded the point limit.")) + continue + + running_cost = new_total + sanitized_gear += gear_option + + return sanitized_gear diff --git a/code/__pragmas.dm b/code/__pragmas.dm index 309883fbda20..ac6541a4a1b2 100644 --- a/code/__pragmas.dm +++ b/code/__pragmas.dm @@ -22,6 +22,9 @@ #pragma DanglingVarType error #pragma MissingInterpolatedExpression error #pragma InvalidIndexOperation error +#pragma PointlessPositionalArgument error +#pragma ProcArgumentGlobal error //3000-3999 #pragma EmptyBlock error +#pragma AmbiguousInOrder error diff --git a/code/controllers/subsystem/objectives_controller.dm b/code/controllers/subsystem/objectives_controller.dm index 38accda46004..7f485288ada9 100644 --- a/code/controllers/subsystem/objectives_controller.dm +++ b/code/controllers/subsystem/objectives_controller.dm @@ -314,7 +314,7 @@ SUBSYSTEM_DEF(objectives) for(var/datum/cm_objective/objective in medium_value) while(LAZYLEN(objective.required_objectives) < objective.number_of_clues_to_generate && LAZYLEN(low_value)) var/datum/cm_objective/req = pick(low_value) - if(req in objective.required_objectives || (req.objective_flags & OBJECTIVE_DEAD_END)) + if((req in objective.required_objectives) || (req.objective_flags & OBJECTIVE_DEAD_END)) continue //don't want to pick the same thing twice OR use a dead-end objective. link_objectives(req, objective) @@ -327,7 +327,7 @@ SUBSYSTEM_DEF(objectives) for(var/datum/cm_objective/objective in high_value) while(LAZYLEN(objective.required_objectives) < objective.number_of_clues_to_generate && LAZYLEN(medium_value)) var/datum/cm_objective/req = pick(medium_value) - if(req in objective.required_objectives || (req.objective_flags & OBJECTIVE_DEAD_END)) + if((req in objective.required_objectives) || (req.objective_flags & OBJECTIVE_DEAD_END)) continue //don't want to pick the same thing twice OR use a dead-end objective. link_objectives(req, objective) @@ -340,7 +340,7 @@ SUBSYSTEM_DEF(objectives) for(var/datum/cm_objective/objective in extreme_value) while(LAZYLEN(objective.required_objectives) < objective.number_of_clues_to_generate && LAZYLEN(high_value)) var/datum/cm_objective/req = pick(high_value) - if(req in objective.required_objectives || (req.objective_flags & OBJECTIVE_DEAD_END)) + if((req in objective.required_objectives) || (req.objective_flags & OBJECTIVE_DEAD_END)) continue //don't want to pick the same thing twice OR use a dead-end objective. link_objectives(req, objective) @@ -353,7 +353,7 @@ SUBSYSTEM_DEF(objectives) for(var/datum/cm_objective/objective in absolute_value) while(LAZYLEN(objective.required_objectives) < objective.number_of_clues_to_generate && LAZYLEN(extreme_value)) var/datum/cm_objective/req = pick(extreme_value) - if(req in objective.required_objectives || (req.objective_flags & OBJECTIVE_DEAD_END)) + if((req in objective.required_objectives) || (req.objective_flags & OBJECTIVE_DEAD_END)) continue //don't want to pick the same thing twice OR use a dead-end objective. link_objectives(req, objective) diff --git a/code/datums/ammo/bullet/special_ammo.dm b/code/datums/ammo/bullet/special_ammo.dm index 10eb5abe0e75..ae5d63c79569 100644 --- a/code/datums/ammo/bullet/special_ammo.dm +++ b/code/datums/ammo/bullet/special_ammo.dm @@ -20,6 +20,7 @@ name = "armor-piercing smartgun bullet" icon_state = "bullet" + damage_falloff = DAMAGE_FALLOFF_TIER_8 accurate_range = 12 accuracy = HIT_ACCURACY_TIER_2 damage = 20 diff --git a/code/datums/ammo/xeno.dm b/code/datums/ammo/xeno.dm index a6e5f9206009..697fc83e641c 100644 --- a/code/datums/ammo/xeno.dm +++ b/code/datums/ammo/xeno.dm @@ -61,7 +61,7 @@ return if(ishuman(M)) - M.apply_effect(2.5, SUPERSLOW) + M.apply_effect(4, SUPERSLOW) M.visible_message(SPAN_DANGER("[M]'s movements are slowed.")) var/no_clothes_neuro = FALSE @@ -127,7 +127,6 @@ accuracy_var_high = PROJECTILE_VARIANCE_TIER_6 accurate_range = 5 max_range = 5 - scatter = SCATTER_AMOUNT_NEURO bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_4 /datum/ammo/xeno/toxin/shotgun/New() @@ -138,6 +137,7 @@ /datum/ammo/xeno/toxin/shotgun/additional name = "additional neurotoxic droplets" + scatter = SCATTER_AMOUNT_NEURO bonus_projectiles_amount = 0 /datum/ammo/xeno/acid diff --git a/code/datums/bug_report.dm b/code/datums/bug_report.dm index fd82d4950b91..4025ce38718f 100644 --- a/code/datums/bug_report.dm +++ b/code/datums/bug_report.dm @@ -56,7 +56,7 @@ /datum/tgui_bug_report_form/proc/sanitize_payload(list/params) for(var/param in params) - params[param] = sanitize(params[param], list("\t"=" ","�"=" ")) + params[param] = sanitize(params[param], list("\t"=" ","�"=" ","<"=" ",">"=" ","&"=" ")) return params diff --git a/code/datums/entities/player_sticky_ban.dm b/code/datums/entities/player_sticky_ban.dm index 70715d1ce2f0..bfe6342ec774 100644 --- a/code/datums/entities/player_sticky_ban.dm +++ b/code/datums/entities/player_sticky_ban.dm @@ -131,3 +131,127 @@ BSQL_PROTECT_DATUM(/datum/entity/stickyban) "ip", "linked_stickyban", ) + +/// Returns either a list containing the primary CKEYs this alt is connected to, +/// or FALSE. +/proc/get_player_is_alt(ckey) + var/list/datum/view_record/known_alt/alts = DB_VIEW(/datum/view_record/known_alt, DB_COMP("ckey", DB_EQUALS, ckey)) + if(!length(alts)) + return FALSE + + var/ckeys = list() + for(var/datum/view_record/known_alt/alt as anything in alts) + ckeys += alt.player_ckey + + return ckeys + +/client/proc/add_known_alt() + set name = "Add Known Alt" + set category = "Admin.Alt" + + var/player_ckey = ckey(tgui_input_text(src, "What is the player's primary Ckey?", "Player Ckey")) + if(!player_ckey) + return + + var/datum/entity/player/player = get_player_from_key(player_ckey) + if(!istype(player)) + return + + var/existing_alts = get_player_is_alt(player_ckey) + if(existing_alts) + var/confirm = tgui_alert(src, "Primary Ckey [player_ckey] is already an alt for [english_list(existing_alts)].", "Primary Ckey", list("Confirm", "Cancel")) + + if(confirm != "Confirm") + return + + var/whitelist_to_add = ckey(tgui_input_text(src, "What is the Ckey that should be added to known alts?", "Alt Ckey")) + if(!whitelist_to_add) + return + + var/alts_existing_primaries = get_player_is_alt(whitelist_to_add) + if(alts_existing_primaries) + if(player_ckey in alts_existing_primaries) + to_chat(src, SPAN_WARNING("The alt '[whitelist_to_add]' is already set as an alt Ckey for '[player_ckey]'.")) + return + + var/confirm = tgui_alert(src, "Alt is already an alt for [english_list(alts_existing_primaries)].", "Alt Ckey", list("Confirm", "Cancel")) + + if(confirm != "Confirm") + return + + var/datum/entity/known_alt/alt = DB_ENTITY(/datum/entity/known_alt) + alt.player_id = player.id + alt.player_ckey = player.ckey + alt.ckey = whitelist_to_add + + alt.save() + + to_chat(src, SPAN_NOTICE("[alt.ckey] added to the known alts of [player.ckey].")) + +/client/proc/remove_known_alt() + set name = "Remove Known Alt" + set category = "Admin.Alt" + + var/player_ckey = ckey(tgui_input_text(src, "What is the player's primary Ckey?", "Player Ckey")) + if(!player_ckey) + return + + var/datum/entity/player/player = get_player_from_key(player_ckey) + if(!istype(player)) + return + + var/existing_alts = get_player_is_alt(player_ckey) + if(existing_alts) + var/confirm = tgui_alert(src, "Primary Ckey [player_ckey] is already an alt for [english_list(existing_alts)].", "Primary Ckey", list("Confirm", "Cancel")) + + if(confirm != "Confirm") + return + + var/list/datum/view_record/known_alt/alts = DB_VIEW(/datum/view_record/known_alt, DB_COMP("player_id", DB_EQUALS, player.id)) + if(!length(alts)) + to_chat(src, SPAN_WARNING("User has no alts on record.")) + return + + var/options = list() + for(var/datum/view_record/known_alt/alt in alts) + options[alt.ckey] = alt.id + + var/picked = tgui_input_list(src, "Which known alt should be removed?", "Alt Removal", options) + if(!picked) + return + + var/picked_id = options[picked] + var/datum/entity/known_alt/to_delete = DB_ENTITY(/datum/entity/known_alt, picked_id) + to_delete.delete() + + to_chat(src, SPAN_NOTICE("[picked] removed from the known alts of [player.ckey].")) + +/datum/entity/known_alt + var/player_id + var/player_ckey + var/ckey + +/datum/entity_meta/known_alt + entity_type = /datum/entity/known_alt + table_name = "known_alts" + field_types = list( + "player_id" = DB_FIELDTYPE_BIGINT, + "player_ckey" = DB_FIELDTYPE_STRING_LARGE, + "ckey" = DB_FIELDTYPE_STRING_LARGE, + ) + +/datum/view_record/known_alt + var/id + var/player_id + var/player_ckey + var/ckey + +/datum/entity_view_meta/known_alt + root_record_type = /datum/entity/known_alt + destination_entity = /datum/view_record/known_alt + fields = list( + "id", + "player_id", + "player_ckey", + "ckey", + ) diff --git a/code/datums/fluff_emails.dm b/code/datums/fluff_emails.dm index f7083541dd5a..12b7af74e1de 100644 --- a/code/datums/fluff_emails.dm +++ b/code/datums/fluff_emails.dm @@ -192,3 +192,48 @@ "} + +/datum/fluff_email/almayer/newgunny + title = "RE: New Gunny" + entry_text = {" + Hey man, you gotta be careful with those razors, + if our new Platoon Sergeant catches you trying to sell your stash, you'll be in for a world of pain. +
+
+ Way I heard it, he transferred in from dealing with the shittiest boot camp at Twentynine Palms, + so he's extra rough around the edges and might just cut you to ribbons with your own supply. + + "} + +/datum/fluff_email/almayer/immunization + title = "RE: Immunizations & Training" + entry_text = {" + One of the battalions just got mulched by a Beebop group and the AAR suggests their training was neglected, it's one hell of a shit show over here. + Command is breathing down everyone's necks and wants the entire regiment on high readiness. Orders are going out to immediately assess each battalion's state and conduct training. +
+
+ Make sure that the recent transfers to the battalion undergo the immunization program, you know the one that was prepared for Swamp Hopper. + It's apart of the readiness check, gotta be prepared for those plant-suckin shitholes like back on O'Bannon's. +
+
+ This is your heads-up, don't make me get chewed out chief. + + "} + +/datum/fluff_email/almayer/morevehicles + title = "RE: Any chance of replacement vehicles?" + entry_text = {" + No, sorry. What we lost on Tychon was what we had. Maisie thinks there might be enough spare bits left to refurbish + one of the old rust buckets, but the chances of that are next to nil unless she can pull more than coins from behind her ear. + + "} + +//Sticking this here because I'm too lazy to type it all out. +/* +/datum/fluff_email/almayer/ + title = "" + entry_text = {" + + + "} +*/ diff --git a/code/datums/global_variables.dm b/code/datums/global_variables.dm index 24d32bbf3552..87267ada41b6 100644 --- a/code/datums/global_variables.dm +++ b/code/datums/global_variables.dm @@ -211,7 +211,7 @@ to_chat(src, "A variable with this name ([param_var_name]) doesn't exist among global variables") return - if(param_var_name in locked && !check_rights(R_DEBUG)) + if((param_var_name in locked) && !check_rights(R_DEBUG)) return variable = param_var_name @@ -270,7 +270,7 @@ if(!variable) return var_value = global.vars[variable] - if(variable in locked && !check_rights(R_DEBUG)) + if((variable in locked) && !check_rights(R_DEBUG)) return if(!autodetect_class) diff --git a/code/game/area/LV522_Chances_Claim.dm b/code/game/area/LV522_Chances_Claim.dm index c3e5c96ad4d7..101d9d90b832 100644 --- a/code/game/area/LV522_Chances_Claim.dm +++ b/code/game/area/LV522_Chances_Claim.dm @@ -115,6 +115,10 @@ icon_state = "green" ceiling = CEILING_NONE +/area/lv522/outdoors/colony_streets/containers + name = "Colony Streets - Container Yard" + icon_state = "yellow" + /area/lv522/outdoors/colony_streets/windbreaker name = "Colony Windbreakers" icon_state = "tcomsatcham" @@ -129,11 +133,11 @@ soundscape_playlist = SCAPE_PL_LV522_INDOORS /area/lv522/outdoors/colony_streets/central_streets - name = "Central Street - West" + name = "Central Streets - West" icon_state = "west" /area/lv522/outdoors/colony_streets/east_central_street - name = "Central Street - East" + name = "Central Streets - East" icon_state = "east" /area/lv522/outdoors/colony_streets/south_street @@ -403,6 +407,7 @@ ceiling = CEILING_REINFORCED_METAL ambience_exterior = AMBIENCE_SHIP minimap_color = MINIMAP_AREA_ENGI + unoviable_timer = FALSE /area/lv522/atmos/outdoor name = "Atmospheric Processor - Outdoors" diff --git a/code/game/area/almayer.dm b/code/game/area/almayer.dm index 55f65c8ecdef..1007f155ace4 100644 --- a/code/game/area/almayer.dm +++ b/code/game/area/almayer.dm @@ -720,7 +720,7 @@ flags_area = AREA_AVOID_BIOSCAN|AREA_NOTUNNEL|AREA_CONTAINMENT /area/almayer/medical/containment/cell/cl - name = "\improper Containment" + name = "\improper Storage Room" /area/almayer/medical/chemistry name = "\improper Medical Chemical laboratory" diff --git a/code/game/gamemodes/cm_process.dm b/code/game/gamemodes/cm_process.dm index d6519bbcd887..2c11af9ca6f9 100644 --- a/code/game/gamemodes/cm_process.dm +++ b/code/game/gamemodes/cm_process.dm @@ -254,7 +254,7 @@ GLOBAL_VAR_INIT(next_admin_bioscan, 30 MINUTES) for(var/mob/living/carbon/human/current_human as anything in GLOB.alive_human_list) if(!(current_human.z && (current_human.z in z_levels) && !istype(current_human.loc, /turf/open/space))) continue - if(current_human.faction in FACTION_LIST_WY || current_human.job == "Corporate Liaison") //The CL is assigned the USCM faction for gameplay purposes + if((current_human.faction in FACTION_LIST_WY) || current_human.job == "Corporate Liaison") //The CL is assigned the USCM faction for gameplay purposes num_WY++ num_headcount++ continue diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index 7b2105cbdb74..4b1f302ed9c8 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -667,7 +667,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou // returns TRUE if transfer_marine's role is at max capacity in the new squad /datum/authority/branch/role/proc/check_squad_capacity(mob/living/carbon/human/transfer_marine, datum/squad/new_squad) - if(transfer_marine.job in new_squad.roles_cap) + if(!isnull(new_squad.roles_cap[transfer_marine.job])) if(new_squad.roles_in[transfer_marine.job] >= new_squad.roles_cap[transfer_marine.job]) return TRUE return FALSE diff --git a/code/game/machinery/doors/poddoor/almayer.dm b/code/game/machinery/doors/poddoor/almayer.dm index 2b296412df7d..b7d19eaa7252 100644 --- a/code/game/machinery/doors/poddoor/almayer.dm +++ b/code/game/machinery/doors/poddoor/almayer.dm @@ -32,6 +32,15 @@ /obj/structure/machinery/door/poddoor/almayer/blended/white/open density = FALSE +/obj/structure/machinery/door/poddoor/almayer/blended/liaison + name = "hull" + desc = "A metal wall used to separate rooms and make up the ship." + icon_state = "liaison_pdoor1" + base_icon_state = "liaison_pdoor" + +/obj/structure/machinery/door/poddoor/almayer/blended/liaison/open + density = FALSE + /obj/structure/machinery/door/poddoor/almayer/blended/aicore icon_state = "aidoor1" base_icon_state = "aidoor" diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index e0cc2b0c3a02..a3bded9fe962 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -112,7 +112,7 @@ Please wait until completion...
build_cost = 75000 var/building = build_type - if (building in subtypesof(/obj/item/robot_parts) + /obj/item/fake_robot_head) + if (building in (subtypesof(/obj/item/robot_parts) + /obj/item/fake_robot_head)) if (src.metal_amount >= build_cost) src.operating = 1 src.update_use_power(USE_POWER_ACTIVE) diff --git a/code/game/objects/items/storage/smartpack.dm b/code/game/objects/items/storage/smartpack.dm index 928388173cc8..afdfbdfa2246 100644 --- a/code/game/objects/items/storage/smartpack.dm +++ b/code/game/objects/items/storage/smartpack.dm @@ -176,7 +176,8 @@ update_icon(user) /obj/item/storage/backpack/marine/smartpack/proc/protective_form(mob/living/carbon/human/user) - if(!istype(user) || activated_form || immobile_form) + if(!istype(user) || activated_form || immobile_form || user.stat == DEAD) + to_chat(user, SPAN_WARNING("You cannot use the S-V42 prototype smartpack right now.")) return if(battery_charge < PROTECTIVE_COST) @@ -224,7 +225,8 @@ /obj/item/storage/backpack/marine/smartpack/proc/immobile_form(mob/living/user) - if(activated_form) + if(activated_form || user.stat == DEAD) + to_chat(user, SPAN_WARNING("You cannot use the S-V42 prototype smartpack right now.")) return if(battery_charge < IMMOBILE_COST && !immobile_form) @@ -263,7 +265,8 @@ /obj/item/storage/backpack/marine/smartpack/proc/repair_form(mob/user) - if(!ishuman(user) || activated_form || repairing) + if(!ishuman(user) || activated_form || repairing || user.stat == DEAD) + to_chat(user, SPAN_WARNING("You cannot use the S-V42 prototype smartpack right now.")) return if(battery_charge < REPAIR_COST) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 5f5135bd0905..9e7482714a3d 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -74,6 +74,8 @@ GLOBAL_LIST_INIT(admin_verbs_default, list( /client/proc/cmd_admin_tacmaps_panel, /client/proc/other_records, /client/proc/toggle_admin_afk_safety, + /client/proc/add_known_alt, + /client/proc/remove_known_alt, /client/proc/toogle_door_control, )) diff --git a/code/modules/buildmode/submodes/variable_edit.dm b/code/modules/buildmode/submodes/variable_edit.dm index 7517012583da..9013934eebf2 100644 --- a/code/modules/buildmode/submodes/variable_edit.dm +++ b/code/modules/buildmode/submodes/variable_edit.dm @@ -27,7 +27,7 @@ var/list/locked = list("vars", "key", "ckey", "client", "icon") selected_key = input(usr,"Enter variable name:" ,"Name", "name") - if(selected_key in locked && !check_rights(R_DEBUG,0)) + if((selected_key in locked) && !check_rights(R_DEBUG, FALSE)) return TRUE var/type = tgui_input_list(usr,"Select variable type:", "Type", list(TYPE_TEXT, TYPE_NUMBER, TYPE_MOB_REFERENCE, TYPE_OBJ_REFERENCE, TYPE_TURF_REFERENCE)) diff --git a/code/modules/client/color_picker.dm b/code/modules/client/color_picker.dm new file mode 100644 index 000000000000..f3eda08af544 --- /dev/null +++ b/code/modules/client/color_picker.dm @@ -0,0 +1,74 @@ +/datum/body_picker/ui_static_data(mob/user) + . = ..() + + .["icon"] = /datum/species::icobase + + .["body_types"] = list() + for(var/key in GLOB.body_type_list) + var/datum/body_type/type = GLOB.body_type_list[key] + .["body_types"] += list( + list("name" = type.name, "icon" = type.icon_name) + ) + + .["skin_colors"] = list() + for(var/key in GLOB.skin_color_list) + var/datum/skin_color/color = GLOB.skin_color_list[key] + .["skin_colors"] += list( + list("name" = color.name, "icon" = color.icon_name, "color" = color.color) + ) + + .["body_sizes"] = list() + for(var/key in GLOB.body_size_list) + var/datum/body_size/size = GLOB.body_size_list[key] + .["body_sizes"] += list( + list("name" = size.name, "icon" = size.icon_name) + ) + +/datum/body_picker/ui_data(mob/user) + . = ..() + + .["body_type"] = GLOB.body_type_list[user.client.prefs.body_type].icon_name + .["skin_color"] = GLOB.skin_color_list[user.client.prefs.skin_color].icon_name + .["body_size"] = GLOB.body_size_list[user.client.prefs.body_size].icon_name + +/datum/body_picker/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + + var/datum/preferences/prefs = ui.user.client.prefs + + switch(action) + if("type") + if(!GLOB.body_type_list[params["name"]]) + return + + prefs.body_type = params["name"] + + if("size") + if(!GLOB.body_size_list[params["name"]]) + return + + prefs.body_size = params["name"] + + if("color") + if(!GLOB.skin_color_list[params["name"]]) + return + + prefs.skin_color = params["name"] + + prefs.ShowChoices(ui.user) + return TRUE + +/datum/body_picker/tgui_interact(mob/user, datum/tgui/ui) + . = ..() + + ui = SStgui.try_update_ui(user, src, ui) + + if(!ui) + ui = new(user, src, "BodyPicker", "Body Picker") + ui.open() + ui.set_autoupdate(FALSE) + + winset(user, ui.window.id, "focus=true") + +/datum/body_picker/ui_state(mob/user) + return GLOB.always_state diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index c3cc73d3fd20..970595a5a045 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -30,6 +30,8 @@ GLOBAL_LIST_INIT(bgstate_options, list( var/atom/movable/screen/rotate/alt/rotate_left var/atom/movable/screen/rotate/rotate_right + var/static/datum/body_picker/picker = new + //doohickeys for savefiles var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used @@ -340,10 +342,13 @@ GLOBAL_LIST_INIT(bgstate_options, list( dat += "

Physical Information:" dat += "®

" dat += "Age: [age]
" - dat += "Gender: [gender == MALE ? "Male" : "Female"]
" - dat += "Skin Color: [skin_color]
" - dat += "Body Size: [body_size]
" - dat += "Body Muscularity: [body_type]
" + dat += "Gender: [gender == MALE ? "Male" : "Female"]

" + + dat += "Skin Color: [skin_color]
" + dat += "Body Size: [body_size]
" + dat += "Body Muscularity: [body_type]
" + dat += "Edit Body: Picker

" + dat += "Traits: Character Traits" dat += "
" @@ -1569,23 +1574,9 @@ GLOBAL_LIST_INIT(bgstate_options, list( if(new_h_gradient_style) grad_style = new_h_gradient_style - if ("skin_color") - var/new_skin_color = tgui_input_list(user, "Choose your character's skin color:", "Character Preferences", GLOB.skin_color_list) - - if (new_skin_color) - skin_color = new_skin_color - - if ("body_size") - var/new_body_size = tgui_input_list(user, "Choose your character's body size:", "Character Preferences", GLOB.body_size_list) - - if (new_body_size) - body_size = new_body_size - - if ("body_type") - var/new_body_type = tgui_input_list(user, "Choose your character's body type:", "Character Preferences", GLOB.body_type_list) - - if (new_body_type) - body_type = new_body_type + if ("body") + picker.tgui_interact(user) + return if("facial") var/new_facial = input(user, "Choose your character's facial-hair color:", "Character Preference", rgb(r_facial, g_facial, b_facial)) as color|null diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 69a3e8a046fd..4b69960c761f 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -645,7 +645,7 @@ if(!organ_data) organ_data = list() - gear = sanitize_list(gear) + gear = sanitize_gear(gear, owner) traits = sanitize_list(traits) read_traits = FALSE diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index c98e254cef2c..f8b4bf55c461 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -106,56 +106,60 @@ icon_state = "stethoscope" /obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/being, mob/living/user) - if(ishuman(being) && isliving(user)) - if(user.a_intent == INTENT_HELP) - var/body_part = parse_zone(user.zone_selected) - if(body_part) - var/sound = null - if(being.stat == DEAD || (being.status_flags&FAKEDEATH)) - sound = "can't hear anything at all, they must have kicked the bucket" - else - switch(body_part) - if("chest") - if(skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC)) // only medical personnel can take advantage of it - if(!ishuman(being)) - return // not a human; only humans have the variable internal_organs_by_name // "cast" it a human type since we confirmed it is one - if(isnull(being.internal_organs_by_name)) - return // they have no organs somehow - var/datum/internal_organ/heart/heart = being.internal_organs_by_name["heart"] - if(heart) - switch(heart.organ_status) - if(ORGAN_LITTLE_BRUISED) - sound = "hear small murmurs with each heart beat, it is possible that [being.p_their()] heart is subtly damaged" - if(ORGAN_BRUISED) - sound = "hear deviant heart beating patterns, result of probable heart damage" - if(ORGAN_BROKEN) - sound = "hear irregular and additional heart beating patterns, probably caused by impaired blood pumping, [being.p_their()] heart is certainly failing" - else - sound = "hear normal heart beating patterns, [being.p_their()] heart is surely healthy" - var/datum/internal_organ/lungs/lungs = being.internal_organs_by_name["lungs"] - if(lungs) - if(sound) - sound += ". You also " - switch(lungs.organ_status) - if(ORGAN_LITTLE_BRUISED) - sound += "hear some crackles when [being.p_they()] breath, [being.p_they()] is possibly suffering from a small damage to the lungs" - if(ORGAN_BRUISED) - sound += "hear unusual respiration sounds and noticeable difficulty to breath, possibly signalling ruptured lungs" - if(ORGAN_BROKEN) - sound += "barely hear any respiration sounds and a lot of difficulty to breath, [being.p_their()] lungs are heavily failing" - else - sound += "hear normal respiration sounds aswell, that means [being.p_their()] lungs are healthy, probably" - else - sound = "can't hear. Really, anything at all, how weird" - else - sound = "hear a lot of sounds... it's quite hard to distinguish, really" - if("eyes","mouth") - sound = "can't hear anything. Maybe that isn't the smartest idea" + if(!ishuman(being) || !isliving(user)) + return + + var/body_part = parse_zone(user.zone_selected) + if(!body_part) + return + + var/sound = null + if(being.stat == DEAD || (being.status_flags & FAKEDEATH)) + sound = "can't hear anything at all, they must have kicked the bucket" + user.visible_message("[user] places [src] against [being]'s [body_part] and listens attentively.", "You place [src] against [being.p_their()] [body_part] and... you [sound].") + return + + switch(body_part) + if("chest") + if(skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC)) // only medical personnel can take advantage of it + if(!ishuman(being)) + return // not a human; only humans have the variable internal_organs_by_name // "cast" it a human type since we confirmed it is one + if(isnull(being.internal_organs_by_name)) + return // they have no organs somehow + var/datum/internal_organ/heart/heart = being.internal_organs_by_name["heart"] + if(heart) + switch(heart.organ_status) + if(ORGAN_LITTLE_BRUISED) + sound = "hear small murmurs with each heart beat, it is possible that [being.p_their()] heart is subtly damaged" + if(ORGAN_BRUISED) + sound = "hear deviant heart beating patterns, result of probable heart damage" + if(ORGAN_BROKEN) + sound = "hear irregular and additional heart beating patterns, probably caused by impaired blood pumping, [being.p_their()] heart is certainly failing" else - sound = "hear a sound here and there, but none of them give you any good information" - user.visible_message("[user] places [src] against [being]'s [body_part] and listens attentively.", "You place [src] against [being.p_their()] [body_part] and... you [sound].") - return - return ..(being,user) + sound = "hear normal heart beating patterns, [being.p_their()] heart is surely healthy" + var/datum/internal_organ/lungs/lungs = being.internal_organs_by_name["lungs"] + if(lungs) + if(sound) + sound += ". You also " + switch(lungs.organ_status) + if(ORGAN_LITTLE_BRUISED) + sound += "hear some crackles when [being.p_they()] breath, [being.p_they()] is possibly suffering from a small damage to the lungs" + if(ORGAN_BRUISED) + sound += "hear unusual respiration sounds and noticeable difficulty to breath, possibly signalling ruptured lungs" + if(ORGAN_BROKEN) + sound += "barely hear any respiration sounds and a lot of difficulty to breath, [being.p_their()] lungs are heavily failing" + else + sound += "hear normal respiration sounds aswell, that means [being.p_their()] lungs are healthy, probably" + else + sound = "can't hear. Really, anything at all, how weird" + else + sound = "hear a lot of sounds... it's quite hard to distinguish, really" + if("eyes","mouth") + sound = "can't hear anything. Maybe that isn't the smartest idea" + else + sound = "hear a sound here and there, but none of them give you any good information" + user.visible_message("[user] places [src] against [being]'s [body_part] and listens attentively.", "You place [src] against [being.p_their()] [body_part] and... you [sound].") + //Medals /obj/item/clothing/accessory/medal diff --git a/code/modules/cm_aliens/structures/special/egg_morpher.dm b/code/modules/cm_aliens/structures/special/egg_morpher.dm index abed439db582..e0691b0d4d28 100644 --- a/code/modules/cm_aliens/structures/special/egg_morpher.dm +++ b/code/modules/cm_aliens/structures/special/egg_morpher.dm @@ -21,12 +21,14 @@ var/datum/shape/range_bounds ///How long it takes to generate one facehugger. var/spawn_cooldown_length = 120 SECONDS + ///How long it takes to generate one facehugger if queen is on ovi. + var/spawn_cooldown_length_ovi = 60 SECONDS COOLDOWN_DECLARE(spawn_cooldown) /obj/effect/alien/resin/special/eggmorph/Initialize(mapload, hive_ref) . = ..() - COOLDOWN_START(src, spawn_cooldown, spawn_cooldown_length) + COOLDOWN_START(src, spawn_cooldown, get_egg_cooldown()) range_bounds = SQUARE(x, y, EGGMORPG_RANGE) /obj/effect/alien/resin/special/eggmorph/Destroy() @@ -107,7 +109,7 @@ if(!linked_hive || !COOLDOWN_FINISHED(src, spawn_cooldown) || stored_huggers == huggers_to_grow_max) return - COOLDOWN_START(src, spawn_cooldown, spawn_cooldown_length) + COOLDOWN_START(src, spawn_cooldown, get_egg_cooldown()) if(stored_huggers < huggers_to_grow_max) stored_huggers = min(huggers_to_grow_max, stored_huggers + 1) @@ -148,7 +150,7 @@ if(stored_huggers) //this way another hugger doesn't immediately spawn after we pick one up if(stored_huggers == huggers_to_grow_max) - COOLDOWN_START(src, spawn_cooldown, spawn_cooldown_length) + COOLDOWN_START(src, spawn_cooldown, get_egg_cooldown()) to_chat(M, SPAN_XENONOTICE("You retrieve a child.")) stored_huggers = max(0, stored_huggers - 1) @@ -161,6 +163,11 @@ . = ..() //Do a view printout as needed just in case the observer doesn't want to join as a Hugger but wants info join_as_facehugger_from_this(user) +/obj/effect/alien/resin/special/eggmorph/proc/get_egg_cooldown() + if(linked_hive?.living_xeno_queen?.ovipositor) + return spawn_cooldown_length_ovi + return spawn_cooldown_length + /obj/effect/alien/resin/special/eggmorph/proc/join_as_facehugger_from_this(mob/dead/observer/user) if(stored_huggers <= huggers_reserved) to_chat(user, SPAN_WARNING("\The [src] doesn't have any facehuggers to inhabit.")) diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm index 6c9c5ad68fea..02bccde9fa37 100644 --- a/code/modules/defenses/sentry.dm +++ b/code/modules/defenses/sentry.dm @@ -313,7 +313,7 @@ new_projectile.damage *= damage_mult new_projectile.accuracy *= accuracy_mult GIVE_BULLET_TRAIT(new_projectile, /datum/element/bullet_trait_iff, faction_group) - new_projectile.fire_at(target, src, owner_mob, new_projectile.ammo.max_range, new_projectile.ammo.shell_speed, null, FALSE) + new_projectile.fire_at(target, owner_mob, src, new_projectile.ammo.max_range, new_projectile.ammo.shell_speed, null, FALSE) muzzle_flash(Get_Angle(get_turf(src), target)) ammo.current_rounds-- track_shot() diff --git a/code/modules/defenses/sentry_flamer.dm b/code/modules/defenses/sentry_flamer.dm index 2c5e9ae62677..fcdd54708609 100644 --- a/code/modules/defenses/sentry_flamer.dm +++ b/code/modules/defenses/sentry_flamer.dm @@ -28,11 +28,11 @@ accuracy_mult = 0.1 fire_delay = 0.5 -/obj/structure/machinery/defenses/sentry/flamer/actual_fire(atom/A) - var/obj/projectile/P = new(create_cause_data(initial(name), owner_mob)) - P.generate_bullet(new ammo.default_ammo) - GIVE_BULLET_TRAIT(P, /datum/element/bullet_trait_iff, faction_group) - P.fire_at(A, src, owner_mob, P.ammo.max_range, P.ammo.shell_speed, null) +/obj/structure/machinery/defenses/sentry/flamer/actual_fire(atom/target) + var/obj/projectile/new_projectile = new(src, create_cause_data(initial(name), owner_mob, src)) + new_projectile.generate_bullet(new ammo.default_ammo) + GIVE_BULLET_TRAIT(new_projectile, /datum/element/bullet_trait_iff, faction_group) + new_projectile.fire_at(target, owner_mob, src, new_projectile.ammo.max_range, new_projectile.ammo.shell_speed, null, FALSE) ammo.current_rounds-- track_shot() if(ammo.current_rounds == 0) diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm index 8511fdc246eb..093ff4c28da5 100644 --- a/code/modules/gear_presets/uscm.dm +++ b/code/modules/gear_presets/uscm.dm @@ -808,7 +808,7 @@ assignment = "Marine Raider" rank = JOB_MARINE_RAIDER role_comm_title = "Op." - languages = list(LANGUAGE_ENGLISH, LANGUAGE_TSL) + languages = list(LANGUAGE_TSL, LANGUAGE_ENGLISH) skills = /datum/skills/commando/deathsquad auto_squad_name = SQUAD_SOF ert_squad = TRUE diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm index 5a4bd0b47ba8..0d457036ce9d 100644 --- a/code/modules/gear_presets/uscm_event.dm +++ b/code/modules/gear_presets/uscm_event.dm @@ -67,7 +67,7 @@ minimap_icon = "deputy" minimap_background = "background_command" skills = /datum/skills/general - languages = ALL_HUMAN_LANGUAGES //Know your enemy. + languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_SCANDINAVIAN, LANGUAGE_SPANISH, LANGUAGE_TSL) //Know your enemy. service_under = list(/obj/item/clothing/under/marine/officer/general, /obj/item/clothing/under/marine/officer/bridge) service_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/general, /obj/item/clothing/suit/storage/jacket/marine/service, /obj/item/clothing/suit/storage/jacket/marine/service/mp) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index c8820ec3b97d..fb7a12342978 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -497,6 +497,12 @@ if(assigned_squad == H.assigned_squad) //same squad msg += "\[Manage Fireteams.\]\n" + if(user.Adjacent(src) && ishuman(user)) + var/mob/living/carbon/human/human_user = user + var/temp_msg = "\[Check Status\]" + if(skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC) && locate(/obj/item/clothing/accessory/stethoscope) in human_user.w_uniform) + temp_msg += " \[Use Stethoscope\]" + msg += "\nMedical actions: [temp_msg]\n" if(print_flavor_text()) msg += "[print_flavor_text()]\n" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a7c082df6b46..88d7305bc0a3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -772,6 +772,21 @@ if(R.fields["last_scan_time"] && R.fields["last_scan_result"]) tgui_interact(usr) break + + if(href_list["check_status"]) + if(!usr.Adjacent(src)) + return + var/mob/living/carbon/human/user = usr + user.check_status(src) + + if(href_list["use_stethoscope"]) + var/mob/living/carbon/human/user = usr + var/obj/item/clothing/accessory/stethoscope/stethoscope = locate() in user.w_uniform + if(!stethoscope || !user.Adjacent(src)) + return + + stethoscope.attack(src, user) + ..() return @@ -990,45 +1005,44 @@ if(prob(30)) // Spam chat less to_chat(src, SPAN_HIGHDANGER("Your movement jostles [W] in your [organ.display_name] painfully.")) -/mob/living/carbon/human/verb/check_status() - set category = "Object" - set name = "Check Status" - set src in view(1) - var/self = (usr == src) - var/msg = "" - - - if(usr.stat > 0 || usr.is_mob_restrained() || !ishuman(usr)) return +/mob/living/carbon/human/proc/check_status(mob/living/carbon/human/target) + if(is_dead() || is_mob_restrained()) + return + ///Final message detailing injuries on the target. + var/msg + ///Is the target the user or somebody else? + var/self = (target == src) + to_chat(usr,SPAN_NOTICE("You [self ? "take a moment to analyze yourself." : "start analyzing [src]."]")) if(self) - var/list/L = get_broken_limbs() - list("chest","head","groin") - if(length(L) > 0) - msg += "Your [english_list(L)] [length(L) > 1 ? "are" : "is"] broken\n" - to_chat(usr,SPAN_NOTICE("You [self ? "take a moment to analyze yourself":"start analyzing [src]"]")) - if(toxloss > 20) - msg += "[self ? "Your" : "Their"] skin is slightly green\n" - if(is_bleeding()) - msg += "[self ? "You" : "They"] have bleeding wounds on [self ? "your" : "their"] body\n" + var/list/broken_limbs = target.get_broken_limbs() - list("chest","head","groin") + if(length(broken_limbs)) + msg += "Your [english_list(broken_limbs)] [length(broken_limbs) > 1 ? "are" : "is"] broken.\n" + if(target.toxloss > 20) + msg += "[self ? "Your" : "Their"] skin is slightly green.\n" + + if(target.is_bleeding()) + msg += "[self ? "You" : "They"] have bleeding wounds on [self ? "your" : "their"] body.\n" if(!self && skillcheck(usr, SKILL_SURGERY, SKILL_SURGERY_NOVICE)) - for(var/datum/effects/bleeding/internal/internal_bleed in effects_list) - msg += "They have bloating and discoloration on their [internal_bleed.limb.display_name]\n" - - if(stat == UNCONSCIOUS) - msg += "They seem to be unconscious\n" - else if(stat == DEAD) - if(src.check_tod() && is_revivable()) - msg += "They're not breathing" - else - if(has_limb("head")) - msg += "Their eyes have gone blank, there are no signs of life" - else - msg += "They are definitely dead" - else - msg += "[self ? "You're":"They're"] alive and breathing" + for(var/datum/effects/bleeding/internal/internal_bleed in target.effects_list) + msg += "They have bloating and discoloration on their [internal_bleed.limb.display_name].\n" + switch(target.stat) + if(DEAD) + if(target.check_tod() && target.is_revivable()) + msg += "They're not breathing." + else + if(has_limb("head")) + msg += "Their eyes have gone blank, there are no signs of life." + else + msg += "They are definitely dead." + if(UNCONSCIOUS) + msg += "They seem to be unconscious.\n" + if(CONSCIOUS) + msg += "[self ? "You're" : "They're"] alive and breathing." - to_chat(usr,SPAN_WARNING(msg)) + to_chat(src, SPAN_WARNING(msg)) /mob/living/carbon/human/verb/view_manifest() diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm index 6e710ecf2d53..7c6a99499d1e 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm @@ -241,7 +241,7 @@ switch(X.build_resin(A, thick, make_message, plasma_cost != 0, build_speed_mod)) if(SECRETE_RESIN_INTERRUPT) if(xeno_cooldown) - apply_cooldown_override(xeno_cooldown * 2) + apply_cooldown_override(xeno_cooldown * 3) return FALSE if(SECRETE_RESIN_FAIL) if(xeno_cooldown) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm index ebcd29ded29d..b93d6d848b44 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm @@ -50,11 +50,11 @@ action_icon_state = "secrete_resin" ability_name = "projected resin" plasma_cost = 100 - xeno_cooldown = 2 SECONDS + xeno_cooldown = 4 SECONDS ability_primacy = XENO_PRIMARY_ACTION_5 care_about_adjacency = FALSE - build_speed_mod = 1 + build_speed_mod = 1.5 var/boosted = FALSE @@ -75,11 +75,12 @@ boosted = TRUE xeno_cooldown = 0 plasma_cost = 0 + build_speed_mod = 1 RegisterSignal(owner, COMSIG_XENO_THICK_RESIN_BYPASS, PROC_REF(override_secrete_thick_resin)) addtimer(CALLBACK(src, PROC_REF(disable_boost)), boost_duration) /datum/action/xeno_action/activable/secrete_resin/remote/queen/proc/disable_boost() - xeno_cooldown = 2 SECONDS + xeno_cooldown = 4 SECONDS plasma_cost = 100 boosted = FALSE UnregisterSignal(owner, COMSIG_XENO_THICK_RESIN_BYPASS) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/sentinel/sentinel_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/sentinel/sentinel_abilities.dm index fdd1164c1479..0aaf6f1270c0 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/sentinel/sentinel_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/sentinel/sentinel_abilities.dm @@ -6,7 +6,7 @@ macro_path = /datum/action/xeno_action/verb/verb_slowing_spit action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_1 - xeno_cooldown = 1.5 SECONDS + xeno_cooldown = 2 SECONDS plasma_cost = 20 // Scatterspit @@ -17,7 +17,7 @@ macro_path = /datum/action/xeno_action/verb/verb_scattered_spit action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 8 SECONDS + xeno_cooldown = 6 SECONDS plasma_cost = 30 // Paralyzing slash diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm b/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm index b39cbbb15e7b..3693b2174f12 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm @@ -68,7 +68,7 @@ // State var/next_slash_buffed = FALSE -#define NEURO_TOUCH_DELAY 4 SECONDS +#define NEURO_TOUCH_DELAY 3 SECONDS /datum/behavior_delegate/sentinel_base/melee_attack_modify_damage(original_damage, mob/living/carbon/carbon_target) if (!next_slash_buffed) @@ -112,6 +112,6 @@ return INTENT_HARM /datum/behavior_delegate/sentinel_base/proc/paralyzing_slash(mob/living/carbon/human/human_target) - human_target.KnockDown(2) - human_target.Stun(2) + human_target.KnockDown(2.5) + human_target.Stun(2.5) to_chat(human_target, SPAN_XENOHIGHDANGER("You fall over, paralyzed by the toxin!")) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/hivelord/resin_whisperer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/hivelord/resin_whisperer.dm index 2d3429df4050..11d9e7312b55 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/hivelord/resin_whisperer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/hivelord/resin_whisperer.dm @@ -44,13 +44,13 @@ name = "Coerce Resin (100)" action_icon_state = "secrete_resin" ability_name = "coerce resin" - xeno_cooldown = 1 SECONDS + xeno_cooldown = 2.5 SECONDS thick = FALSE make_message = FALSE no_cooldown_msg = TRUE - build_speed_mod = 2 // the actual building part takes twice as long + build_speed_mod = 2.5 // the actual building part takes twice as long macro_path = /datum/action/xeno_action/verb/verb_coerce_resin action_type = XENO_ACTION_CLICK @@ -91,8 +91,10 @@ if(care_about_adjacency) if(owner.Adjacent(target_turf)) build_speed_mod = 1 + xeno_cooldown = 1 SECONDS else build_speed_mod = initial(build_speed_mod) + xeno_cooldown = initial(xeno_cooldown) var/mob/living/carbon/xenomorph/hivelord = owner if(!..()) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d198f7818eda..712bef37afad 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -905,7 +905,7 @@ note dizziness decrements automatically in the mob's Life() proc. conga_line += S.buckled while(!end_of_conga) var/atom/movable/A = S.pulling - if(A in conga_line || A.anchored) //No loops, nor moving anchored things. + if((A in conga_line) || A.anchored) //No loops, nor moving anchored things. end_of_conga = TRUE break conga_line += A diff --git a/code/modules/mob/new_player/skin_color.dm b/code/modules/mob/new_player/skin_color.dm index f3158613c38c..166cb22eb302 100644 --- a/code/modules/mob/new_player/skin_color.dm +++ b/code/modules/mob/new_player/skin_color.dm @@ -2,6 +2,14 @@ var/name var/icon_name + var/color + +/datum/skin_color/New() + . = ..() + + var/icon/icon_to_use = icon(/datum/species::icobase, "[icon_name]_torso_[/datum/body_size/thin::icon_name]_[/datum/body_type/twig::icon_name]") + color = icon_to_use.GetPixel(icon_to_use.Width() / 2, icon_to_use.Height() / 2) + /datum/skin_color/cmplayer name = "Extra Pale" icon_name = "cmp1" diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index dc97d3452b86..2847021c4775 100644 --- a/code/modules/projectiles/gun_attachables.dm +++ b/code/modules/projectiles/gun_attachables.dm @@ -2996,9 +2996,16 @@ Defined in conflicts.dm of the #defines folder. to_chat(user, SPAN_WARNING("[src] is full.")) return - var/datum/reagent/to_remove - if(length(fuel_holder.reagents.reagent_list)) - to_remove = fuel_holder.reagents.reagent_list[1] + if(!fuel_holder.reagents || length(fuel_holder.reagents.reagent_list) < 1) + to_chat(user, SPAN_WARNING("[fuel_holder] is empty!")) + return + + var/datum/reagent/to_remove = fuel_holder.reagents.reagent_list[1] + + var/flamer_chem = "utnapthal" + if(!istype(to_remove) || flamer_chem != to_remove.id || length(fuel_holder.reagents.reagent_list) > 1) + to_chat(user, SPAN_WARNING("You can't mix fuel mixtures!")) + return var/fuel_amt if(to_remove) diff --git a/code/modules/tgui_panel/telemetry.dm b/code/modules/tgui_panel/telemetry.dm index bd49596aa19a..951a82736b58 100644 --- a/code/modules/tgui_panel/telemetry.dm +++ b/code/modules/tgui_panel/telemetry.dm @@ -65,16 +65,9 @@ if (!ckey) return -/* - var/list/all_known_alts = GLOB.known_alts.load_known_alts() - var/list/our_known_alts = list() - - for (var/known_alt in all_known_alts) - if (known_alt[1] == ckey) - our_known_alts += known_alt[2] - else if (known_alt[2] == ckey) - our_known_alts += known_alt[1] -*/ + var/list/known_alts = list() + for(var/datum/view_record/known_alt/alts in DB_VIEW(/datum/view_record/known_alt, DB_COMP("player_ckey", DB_EQUALS, ckey))) + known_alts += alts.ckey var/list/found @@ -98,10 +91,11 @@ "address" = row["address"], "computer_id" = row["computer_id"], )) + */ - if (row["ckey"] in our_known_alts) + if (row["ckey"] in known_alts) continue - */ + if (world.IsBanned(row["ckey"], row["address"], row["computer_id"], real_bans_only = TRUE, is_telemetry = TRUE)) found = row diff --git a/colonialmarines.dme b/colonialmarines.dme index c9fb287c0224..dc47f920f19b 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1561,6 +1561,7 @@ #include "code\modules\clans\ship.dm" #include "code\modules\client\client_defines.dm" #include "code\modules\client\client_procs.dm" +#include "code\modules\client\color_picker.dm" #include "code\modules\client\country_flags.dm" #include "code\modules\client\player_details.dm" #include "code\modules\client\preferences.dm" diff --git a/html/changelogs/AutoChangeLog-pr-7423.yml b/html/changelogs/AutoChangeLog-pr-7423.yml deleted file mode 100644 index 0b0c3349f563..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7423.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Sporticusmge" -delete-after: True -changes: - - balance: "Night Vision Optic now works 2 times longer, and recharge 2 times longer. Squad Leader NVO prices changed, from 20 to 25." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7424.yml b/html/changelogs/AutoChangeLog-pr-7424.yml new file mode 100644 index 000000000000..ec3e71d89263 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7424.yml @@ -0,0 +1,5 @@ +author: "efzapa" +delete-after: True +changes: + - rscadd: "All USCM Flag Officers now understand and can use Tactical Sign Language." + - qol: "Tactical Sign Language is now the default language for all MARSOC spawned." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7426.yml b/html/changelogs/AutoChangeLog-pr-7426.yml deleted file mode 100644 index 47b9ab544abc..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7426.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "deathrobotpunch" -delete-after: True -changes: - - balance: "The Tactical compact nail gun is now available in the Chief Engineers vendor." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7427.yml b/html/changelogs/AutoChangeLog-pr-7427.yml new file mode 100644 index 000000000000..c4ef1f51f8fe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7427.yml @@ -0,0 +1,10 @@ +author: "thevandie" +delete-after: True +changes: + - imageadd: "added a new sprite for the liaison's wall divider behind his desk" + - mapadd: "added a WY mre to the liaison's liquor cabinet (cardboard box full of donk pockets)" + - mapadd: "added a tv to the liaison's desk, in place of the containment cell console" + - mapadd: "added a new button to the liaison's desk to replace the wall divider button. it controls the back office shutters" + - maptweak: "moved the liaison's shutters button and console to the back office" + - maptweak: "moved some stuff around in the liquor cabinet to accommodate the MRE being placed into it" + - maptweak: "moved some stuff around on the liaison's desk to make it look cleaner" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7428.yml b/html/changelogs/AutoChangeLog-pr-7428.yml deleted file mode 100644 index d2038d3e452e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7428.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Red-byte3D" -delete-after: True -changes: - - balance: "sg effective range nerfed to 5" - - balance: "sg falloff increased" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7433.yml b/html/changelogs/AutoChangeLog-pr-7433.yml deleted file mode 100644 index 80451ecdb9d8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7433.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "private-tristan" -delete-after: True -changes: - - balance: "Forecon M39 spawn now has its spawn ammo in belt, instead of in satchel." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7438.yml b/html/changelogs/AutoChangeLog-pr-7438.yml deleted file mode 100644 index 7f6d7f79b717..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7438.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - ui: "The ghost observer tacmap will now scroll both horizontally and vertically as needed to display a large map." - - ui: "The TGUI panels for tacmaps and drawings have been polished to utilize more minimap space fully." - - refactor: "Refactored minimap generation code to calculate min and max faster, to more aggressively trim minimaps, and to support larger minimaps (was 480px now 512px)." - - bugfix: "Fixes an issue where predator tacmap would take over the ghost tacmap preventing it from opening for observers" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7451.yml b/html/changelogs/AutoChangeLog-pr-7451.yml deleted file mode 100644 index 3c3ac036d300..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7451.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Fix hive core placement restriction" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7455.yml b/html/changelogs/AutoChangeLog-pr-7455.yml deleted file mode 100644 index d65e2c461ce1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7455.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zenith00000" -delete-after: True -changes: - - bugfix: "fixed some un-needed code and added missing tiles" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7487.yml b/html/changelogs/AutoChangeLog-pr-7487.yml new file mode 100644 index 000000000000..c7089bcf10d5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7487.yml @@ -0,0 +1,4 @@ +author: "BOBAMA" +delete-after: True +changes: + - balance: "You can now go on Ovi and build Hive Cores anywhere in the Atmospheric Processor on Chance's Claim" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7489.yml b/html/changelogs/AutoChangeLog-pr-7489.yml new file mode 100644 index 000000000000..685a75df993b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7489.yml @@ -0,0 +1,4 @@ +author: "harryob" +delete-after: True +changes: + - bugfix: "you can transfer riflemen between squads again" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7490.yml b/html/changelogs/AutoChangeLog-pr-7490.yml new file mode 100644 index 000000000000..a9d6b7594c3b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7490.yml @@ -0,0 +1,4 @@ +author: "detectivegoogle Drathek" +delete-after: True +changes: + - balance: "Morphers generate huggers twice as fast if queen is on ovi" \ No newline at end of file diff --git a/html/changelogs/archive/2024-11.yml b/html/changelogs/archive/2024-11.yml index 89c4cfdf53ac..9b7fe5840749 100644 --- a/html/changelogs/archive/2024-11.yml +++ b/html/changelogs/archive/2024-11.yml @@ -40,3 +40,76 @@ with "COBALT_BASE_API" and "COBALT_API_KEY" realforest2001: - bugfix: No store cryo pods now work as intended. +2024-11-02: + Drathek: + - ui: The ghost observer tacmap will now scroll both horizontally and vertically + as needed to display a large map. + - ui: The TGUI panels for tacmaps and drawings have been polished to utilize more + minimap space fully. + - refactor: Refactored minimap generation code to calculate min and max faster, + to more aggressively trim minimaps, and to support larger minimaps (was 480px + now 512px). + - bugfix: Fixes an issue where predator tacmap would take over the ghost tacmap + preventing it from opening for observers + - bugfix: Fix hive core placement restriction + Red-byte3D: + - balance: sg effective range nerfed to 5 + - balance: sg falloff increased + Sporticusmge: + - balance: Night Vision Optic now works 2 times longer, and recharge 2 times longer. + Squad Leader NVO prices changed, from 20 to 25. + Zenith00000: + - bugfix: fixed some un-needed code and added missing tiles + deathrobotpunch: + - balance: The Tactical compact nail gun is now available in the Chief Engineers + vendor. + private-tristan: + - balance: Forecon M39 spawn now has its spawn ammo in belt, instead of in satchel. +2024-11-03: + Ansekishoku: + - bugfix: Smartpack abilities no longer function if the user is dead. + GoldenDarkness55: + - balance: Cooldown multiplier for interrupting remote building raised from 2 to + 3 + - balance: Queen remote building modifier raised from 1 to 1.5 (slower, around 2.3-2.5s), + cooldown raised from 2s to 4s + - balance: Resin Whisperer remote building modifier raised from 2 to 2.5 (slower, + around 2.5s), cooldown raised from 1s to 2.5s + - balance: Sentinel neuro spit cooldown raised 1.5 to 2s, superslow 2.5 to 4s + - balance: Sentinel scatter spit scatter lowered 60 to 45, cooldown lowered 8s to + 6s + - balance: Sentinel paralyzing slash stuns after 3 seconds instead of 4 and lasts + 2.5 seconds from 2. +2024-11-04: + Drathek: + - bugfix: Fixes additional projectiles being fired from humans that placed a shotgun + sentry instead of the sentry. + - bugfix: Fixes cause_data for flamer sentries so now kills they make are explained + in the message and attributed to the kill counter for the sentry. + - bugfix: Fix reloading under barrel flamers with any reagent from a flamer tank + - ui: Fixed the ping relay buttons not displaying anything when clicked on the first + time. Now Button.Confirm.confirmContent will only replace children if it is + truthy. + - balance: Buffed SG armor penetration ammo damage falloff from 5 to 3. + VileBeggar: + - qol: You can now use the 'check status' verb and any stethoscope you might have + attached to your uniform directly by examining an adjacent human. + harryob: + - rscadd: a new tgui with better previews for the different skin colors / body types + / body sizes + - admin: you can add "known alts" to players, now + vero5123: + - bugfix: Special characters are now properly sanitized and removed in bug reports. +2024-11-05: + Drathek: + - code_imp: Enabled 3 more OD pragmas for linting and fixed some ambiguous usage + of In + Killfish: + - balance: Improved consistency of Scatter Spits accuracy. Now one of your projectiles + is guaranteed to to go in the direction you're aiming at, instead of potentially + going everywhere except where you're aiming and missing everything. + Nanu, HarryOb: + - code_imp: Adds some code so if you're above the pointcap on your loadout, items + will be removed to put you at the point cap limit. + Sargeantmuffinman: + - rscadd: Added more lore emails to the computers diff --git a/icons/obj/structures/doors/blastdoors_shutters.dmi b/icons/obj/structures/doors/blastdoors_shutters.dmi index 1fe1df44b23a..b52322c01ed7 100644 Binary files a/icons/obj/structures/doors/blastdoors_shutters.dmi and b/icons/obj/structures/doors/blastdoors_shutters.dmi differ 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 ff2e3daf9b25..ac6672799f36 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -802,7 +802,7 @@ pixel_y = 6 }, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "aCS" = ( /obj/structure/surface/rack, /obj/item/clothing/suit/storage/hazardvest, @@ -943,6 +943,9 @@ }, /turf/open/floor/plating, /area/lv522/landing_zone_1) +"aHA" = ( +/turf/open/auto_turf/shale/layer1, +/area/lv522/outdoors/colony_streets/containers) "aHH" = ( /obj/structure/platform{ dir = 1 @@ -3743,6 +3746,10 @@ /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor/corsat/marked, /area/lv522/indoors/c_block/cargo) +"cxN" = ( +/obj/item/prop/colony/used_flare, +/turf/open/auto_turf/shale/layer1, +/area/lv522/outdoors/colony_streets/containers) "cxT" = ( /obj/structure/bed/chair/comfy{ dir = 4 @@ -4893,7 +4900,7 @@ pixel_y = 1 }, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "dbt" = ( /obj/item/prop/alien/hugger, /turf/open/floor/corsat/brown/southeast, @@ -5027,6 +5034,12 @@ /obj/structure/cargo_container/grant/right, /turf/open/auto_turf/sand_white/layer0, /area/lv522/outdoors/nw_rockies) +"ddd" = ( +/obj/structure/prop/invuln/ice_prefab/standalone{ + icon_state = "white" + }, +/turf/open/auto_turf/shale/layer1, +/area/lv522/outdoors/colony_streets/containers) "ddo" = ( /obj/structure/window/reinforced{ dir = 8 @@ -5582,6 +5595,9 @@ /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor/corsat/brown/west, /area/lv522/atmos/cargo_intake) +"dqy" = ( +/turf/open/auto_turf/sand_white/layer0, +/area/lv522/outdoors/colony_streets/containers) "dqB" = ( /turf/open/asphalt/cement/cement2, /area/lv522/outdoors/colony_streets/south_east_street) @@ -6650,6 +6666,15 @@ "dTv" = ( /turf/open/floor/corsat/brown, /area/lv522/oob/w_y_vault) +"dTD" = ( +/obj/structure/prop/invuln/ice_prefab/roof_greeble{ + icon_state = "flagpole"; + layer = 4.11; + pixel_x = 4; + pixel_y = 3 + }, +/turf/open/auto_turf/shale/layer1, +/area/lv522/outdoors/colony_streets/containers) "dTJ" = ( /obj/structure/prop/invuln/ice_prefab{ dir = 5 @@ -7451,7 +7476,7 @@ pixel_y = 1 }, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "eoZ" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor/corsat/brown, @@ -7703,7 +7728,7 @@ dir = 4 }, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "ewf" = ( /obj/structure/platform, /turf/open/asphalt/cement/cement4, @@ -7713,7 +7738,7 @@ layer = 2.5 }, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "ewn" = ( /obj/structure/platform, /turf/open/asphalt/cement/cement4, @@ -7721,7 +7746,7 @@ "ewp" = ( /obj/item/weapon/twohanded/folded_metal_chair, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "ewE" = ( /obj/structure/platform{ dir = 4 @@ -7755,7 +7780,7 @@ "exB" = ( /obj/effect/spawner/gibspawner/xeno, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "exQ" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -8120,7 +8145,7 @@ pixel_y = 14 }, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "eIF" = ( /obj/structure/bed/alien, /obj/item/pipe{ @@ -8136,7 +8161,7 @@ }, /obj/item/prop/colony/used_flare, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "eJc" = ( /obj/structure/surface/table/almayer, /obj/effect/landmark/objective_landmark/close, @@ -8172,7 +8197,7 @@ "eJq" = ( /obj/item/stack/sheet/metal, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "eJw" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/corsat/plate, @@ -8347,7 +8372,7 @@ pixel_y = 1 }, /turf/open/floor/prison/floor_plate, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "eOj" = ( /obj/structure/machinery/light{ dir = 8 @@ -8371,10 +8396,7 @@ pixel_y = 1 }, /turf/open/floor/prison/floor_plate, -/area/lv522/atmos/cargo_intake) -"eOA" = ( -/turf/closed/wall/shiva/prefabricated/reinforced, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "eOE" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -8635,14 +8657,14 @@ "eXe" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/auto_turf/shale/layer1, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "eXG" = ( /turf/open/auto_turf/sand_white/layer0, /area/lv522/landing_zone_2) "eXO" = ( /obj/effect/spawner/gibspawner/xeno, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "eXU" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -8656,7 +8678,7 @@ pixel_y = 1 }, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "eYh" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -8846,7 +8868,7 @@ req_access = null }, /turf/open/asphalt/cement/cement1, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "fdT" = ( /obj/structure/closet/crate, /turf/open/floor/prison/darkbrownfull2, @@ -8880,10 +8902,10 @@ pixel_x = 1 }, /turf/open/floor/prison/floor_plate, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "feZ" = ( /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "ffb" = ( /turf/open/floor/prison/darkbrownfull2, /area/lv522/indoors/c_block/bridge) @@ -8907,7 +8929,7 @@ "ffr" = ( /obj/structure/cargo_container/wy/left, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "ffL" = ( /obj/item/clothing/mask/facehugger{ desc = "It has some sort of a tube at the end of its tail. What the hell is this thing?"; @@ -8982,11 +9004,11 @@ "fhY" = ( /obj/structure/cargo_container/wy/mid, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fib" = ( /obj/structure/cargo_container/wy/right, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fiu" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/structure/barricade/wooden{ @@ -8997,7 +9019,7 @@ "fiA" = ( /obj/structure/cargo_container/horizontal/blue/top, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fiB" = ( /obj/structure/prop/invuln/ice_prefab{ dir = 9 @@ -9053,7 +9075,7 @@ "fkb" = ( /obj/item/prop/alien/hugger, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fki" = ( /obj/structure/bed/chair{ dir = 1 @@ -9081,6 +9103,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison/greenfull/east, /area/lv522/indoors/b_block/bridge) +"fkW" = ( +/turf/open/asphalt/cement/cement1, +/area/lv522/outdoors/colony_streets/containers) "fld" = ( /mob/living/simple_animal/mouse, /turf/open/floor/prison, @@ -9622,7 +9647,7 @@ current_mag = null }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fAA" = ( /obj/structure/largecrate/random/barrel{ layer = 2.9 @@ -9636,7 +9661,7 @@ /obj/structure/bed/roller, /obj/effect/decal/cleanable/blood, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fAH" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -9670,7 +9695,7 @@ "fBP" = ( /obj/structure/machinery/iv_drip, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fBR" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -9680,7 +9705,7 @@ "fBU" = ( /obj/item/storage/belt/medical/lifesaver, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fBY" = ( /obj/item/prop/colony/used_flare, /turf/open/floor/prison/floor_plate, @@ -9702,15 +9727,15 @@ dir = 1 }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fCN" = ( /obj/structure/cargo_container/horizontal/blue/middle, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fCP" = ( /obj/item/prop/colony/used_flare, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fCU" = ( /obj/effect/decal/cleanable/blood{ desc = "Watch your step."; @@ -9729,7 +9754,7 @@ "fDi" = ( /obj/structure/largecrate/random, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fDj" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin{ @@ -9747,7 +9772,7 @@ }, /obj/item/prop/colony/used_flare, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fDr" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 @@ -9785,7 +9810,7 @@ current_mag = null }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fEe" = ( /obj/structure/platform, /obj/effect/decal/cleanable/dirt, @@ -9819,7 +9844,7 @@ pixel_x = 1 }, /turf/open/floor/prison/floor_plate, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fFw" = ( /obj/structure/largecrate/random/barrel/white, /turf/open/floor/prison, @@ -10192,9 +10217,6 @@ "fSe" = ( /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/atmos/filt) -"fSf" = ( -/turf/open/auto_turf/sand_white/layer0, -/area/lv522/atmos/cargo_intake) "fSo" = ( /obj/structure/machinery/landinglight/ds1, /turf/open/floor/prison/greenfull/east, @@ -10215,16 +10237,16 @@ dir = 8 }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fSX" = ( /obj/effect/landmark/objective_landmark/close, /obj/structure/bed/roller, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fTi" = ( /obj/item/prop/alien/hugger, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fTN" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -10236,7 +10258,7 @@ current_rounds = 0 }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fTP" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, @@ -10291,7 +10313,7 @@ "fWD" = ( /obj/structure/cargo_container/horizontal/blue/bottom, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fWG" = ( /turf/open/auto_turf/shale/layer1, /area/lv522/outdoors/colony_streets/south_east_street) @@ -10336,7 +10358,7 @@ current_rounds = 0 }, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "fXx" = ( /turf/open/asphalt/cement/cement4, /area/lv522/outdoors/colony_streets/central_streets) @@ -10359,9 +10381,6 @@ }, /turf/open/floor/corsat/plate, /area/lv522/indoors/c_block/mining) -"fXU" = ( -/turf/open/asphalt/cement/cement1, -/area/lv522/atmos/cargo_intake) "fXZ" = ( /obj/structure/curtain/medical, /turf/open/floor/strata/white_cyan4/east, @@ -10726,7 +10745,7 @@ /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /obj/item/stack/rods, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "ggO" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin{ @@ -10748,7 +10767,7 @@ "ghr" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "ghu" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/wood, @@ -10770,7 +10789,7 @@ pixel_x = 1 }, /turf/open/floor/prison/floor_plate, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "ghY" = ( /obj/structure/bed/chair/dropship/passenger{ dir = 4 @@ -10793,7 +10812,7 @@ "giF" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "giX" = ( /obj/structure/curtain/red, /turf/open/floor/wood, @@ -10802,7 +10821,7 @@ /obj/vehicle/train/cargo/trolley, /obj/effect/landmark/objective_landmark/close, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gjt" = ( /obj/structure/machinery/colony_floodlight{ density = 0; @@ -10831,7 +10850,7 @@ /obj/vehicle/train/cargo/trolley, /obj/effect/landmark/objective_landmark/medium, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gkg" = ( /obj/structure/machinery/portable_atmospherics/hydroponics{ icon_state = "hydrotray4" @@ -10895,7 +10914,7 @@ "gmb" = ( /obj/vehicle/train/cargo/engine, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gme" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 @@ -10917,7 +10936,7 @@ pixel_x = 1 }, /turf/closed/wall/strata_ice/dirty, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gmu" = ( /obj/structure/platform{ dir = 1 @@ -10926,7 +10945,7 @@ /area/lv522/outdoors/colony_streets/south_street) "gnd" = ( /turf/closed/wall/strata_ice/dirty, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gnf" = ( /obj/structure/machinery/landinglight/ds1/delaythree{ dir = 1 @@ -10951,7 +10970,7 @@ pixel_x = 17 }, /turf/closed/wall/strata_ice/dirty, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "gok" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/plating_catwalk/prison, @@ -11800,7 +11819,7 @@ /obj/structure/barricade/deployable, /obj/effect/decal/cleanable/blood, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "gLV" = ( /obj/structure/prop/server_equipment/yutani_server/broken{ density = 0; @@ -11822,7 +11841,7 @@ icon_state = "crawler_crate_alt" }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gMy" = ( /obj/structure/barricade/deployable{ dir = 8 @@ -11831,7 +11850,7 @@ current_mag = null }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gMG" = ( /obj/structure/platform_decoration{ dir = 1 @@ -11873,7 +11892,7 @@ pixel_x = 1 }, /turf/closed/wall/strata_ice/dirty, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gNn" = ( /obj/structure/largecrate/supply/medicine/medkits{ pixel_x = -7 @@ -12152,7 +12171,7 @@ "gVd" = ( /obj/structure/cargo_container/wy/left, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gVf" = ( /obj/structure/machinery/landinglight/ds2, /obj/effect/decal/cleanable/dirt, @@ -12208,7 +12227,7 @@ "gWg" = ( /obj/structure/cargo_container/wy/mid, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gWh" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison/darkpurple2, @@ -12271,14 +12290,14 @@ }, /obj/structure/barricade/deployable, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gXE" = ( /obj/item/weapon/gun/pistol/m1911{ current_mag = null }, /obj/effect/decal/cleanable/blood, /turf/open/asphalt/cement/cement1, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "gXL" = ( /obj/item/prop/alien/hugger, /obj/effect/decal/cleanable/dirt, @@ -12429,7 +12448,7 @@ "haR" = ( /obj/structure/largecrate/random/barrel/true_random, /turf/open/asphalt/cement/cement1, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "haY" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -12446,7 +12465,7 @@ "hbj" = ( /obj/effect/spawner/gibspawner/xeno, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hbk" = ( /obj/effect/spawner/gibspawner/robot, /turf/open/floor/corsat/marked, @@ -12503,7 +12522,7 @@ layer = 3.1 }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hbN" = ( /obj/item/ammo_magazine/rifle/heap{ current_rounds = 0 @@ -12516,7 +12535,7 @@ pixel_x = 1 }, /turf/open/floor/prison/floor_plate, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hcd" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -12543,7 +12562,7 @@ current_rounds = 0 }, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "hcE" = ( /obj/item/stack/sheet/metal, /obj/effect/decal/cleanable/generic, @@ -12558,7 +12577,7 @@ current_mag = null }, /turf/open/auto_turf/shale/layer1, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "hcZ" = ( /obj/structure/machinery/colony_floodlight, /turf/open/asphalt/cement, @@ -12877,11 +12896,11 @@ "hmz" = ( /obj/structure/largecrate/random/barrel/true_random, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "hmD" = ( /obj/structure/barricade/deployable, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hmJ" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -12895,7 +12914,7 @@ current_mag = null }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hnk" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -12916,7 +12935,7 @@ }, /obj/structure/barricade/deployable, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "hoq" = ( /turf/open/asphalt/cement/cement14, /area/lv522/outdoors/nw_rockies) @@ -13462,7 +13481,7 @@ /area/lv522/indoors/c_block/mining) "hFu" = ( /turf/open/floor/prison/floor_plate, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hFG" = ( /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor/prison/darkbrownfull2, @@ -13479,7 +13498,7 @@ "hFS" = ( /obj/item/prop/colony/used_flare, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hFX" = ( /turf/open/auto_turf/shale/layer2, /area/lv522/outdoors/colony_streets/south_street) @@ -13496,11 +13515,11 @@ "hGJ" = ( /obj/structure/cargo_container/lockmart/left, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hGU" = ( /obj/structure/cargo_container/lockmart/mid, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hGX" = ( /obj/structure/bed/chair/comfy{ dir = 1 @@ -13527,7 +13546,7 @@ "hHN" = ( /obj/structure/cargo_container/lockmart/right, /turf/open/floor/prison/floor_marked, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hHY" = ( /obj/item/prop/colony/used_flare, /obj/effect/decal/warning_stripes{ @@ -13538,7 +13557,7 @@ pixel_x = 1 }, /turf/open/floor/prison/floor_plate, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hIf" = ( /turf/open/floor/prison/darkbrownfull2, /area/lv522/landing_zone_2) @@ -13906,6 +13925,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/corsat/plate, /area/lv522/atmos/east_reactor/south) +"hRb" = ( +/obj/structure/cargo_container/kelland/right, +/turf/open/auto_turf/sand_white/layer0, +/area/lv522/outdoors/colony_streets/containers) "hRj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -13967,22 +13990,22 @@ /obj/effect/spawner/gibspawner/xeno, /obj/effect/decal/cleanable/blood/xeno, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "hTh" = ( /obj/item/prop/colony/used_flare, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "hTk" = ( /obj/structure/ore_box, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hTo" = ( /obj/structure/barricade/deployable, /obj/structure/barricade/deployable{ dir = 4 }, /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "hTA" = ( /obj/structure/machinery/door/airlock/almayer/engineering{ name = "\improper Cargo Bay Break Room"; @@ -14307,7 +14330,7 @@ "ier" = ( /obj/structure/cargo_container/arious/leftmid, /turf/open/floor/prison, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "ieE" = ( /obj/item/ammo_magazine/rifle/heap{ current_rounds = 0 @@ -14325,11 +14348,11 @@ "ieW" = ( /obj/structure/cargo_container/arious/rightmid, /turf/open/floor/prison, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "iff" = ( /obj/structure/cargo_container/arious/right, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "ifg" = ( /obj/structure/stairs/perspective{ icon_state = "p_stair_full" @@ -14580,6 +14603,9 @@ /obj/structure/machinery/light, /turf/open/floor/corsat/marked, /area/lv522/indoors/c_block/mining) +"imF" = ( +/turf/open/asphalt/cement/cement3, +/area/lv522/outdoors/colony_streets/containers) "imJ" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -14610,6 +14636,9 @@ /obj/structure/bed/sofa/south/grey/left, /turf/open/floor/prison, /area/lv522/indoors/a_block/dorms) +"inO" = ( +/turf/open/asphalt/cement/cement4, +/area/lv522/outdoors/colony_streets/containers) "inU" = ( /obj/structure/machinery/light{ dir = 1 @@ -15775,6 +15804,9 @@ /obj/structure/platform_decoration, /turf/open/asphalt/cement/cement2, /area/lv522/outdoors/colony_streets/south_street) +"iVX" = ( +/turf/open/asphalt/cement/cement2, +/area/lv522/outdoors/colony_streets/containers) "iVY" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spider/spiderling/nogrow, @@ -17215,11 +17247,11 @@ "jEa" = ( /obj/structure/cargo_container/ferret/left, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "jEk" = ( /obj/structure/cargo_container/ferret/mid, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "jEq" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /obj/structure/machinery/light{ @@ -17230,7 +17262,7 @@ "jEF" = ( /obj/structure/cargo_container/ferret/right, /turf/open/auto_turf/sand_white/layer0, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "jEW" = ( /obj/structure/bed/chair{ dir = 1 @@ -17551,7 +17583,7 @@ "jMJ" = ( /obj/item/prop/colony/used_flare, /turf/open/asphalt/cement/cement12, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "jMZ" = ( /obj/structure/surface/table/almayer, /obj/item/tool/pen/blue/clicky{ @@ -17591,12 +17623,9 @@ }, /turf/open/floor/prison/blue_plate/north, /area/lv522/indoors/a_block/admin) -"jNY" = ( -/turf/open/asphalt/cement/cement12, -/area/lv522/atmos/cargo_intake) "jOh" = ( /turf/open/asphalt/cement/cement15, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "jOr" = ( /obj/structure/prop/ice_colony/dense/planter_box{ dir = 9 @@ -19204,7 +19233,7 @@ "kBK" = ( /obj/structure/largecrate/random, /turf/open/auto_turf/shale/layer1, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "kBT" = ( /obj/structure/cargo_container/horizontal/blue/bottom, /turf/open/auto_turf/shale/layer1, @@ -21989,7 +22018,7 @@ "mee" = ( /obj/structure/largecrate/random/barrel/true_random, /turf/open/auto_turf/shale/layer1, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "men" = ( /turf/closed/wall/strata_outpost, /area/lv522/atmos/east_reactor/south) @@ -22376,6 +22405,10 @@ }, /turf/open/floor/prison/greenfull/east, /area/lv522/landing_zone_1/ceiling) +"moC" = ( +/obj/structure/barricade/deployable, +/turf/open/auto_turf/sand_white/layer0, +/area/lv522/outdoors/colony_streets/containers) "moI" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/filingcabinet{ @@ -24633,6 +24666,10 @@ }, /turf/open/floor/prison/floor_plate, /area/lv522/outdoors/colony_streets/north_street) +"nsL" = ( +/obj/structure/cargo_container/kelland/left, +/turf/open/auto_turf/sand_white/layer0, +/area/lv522/outdoors/colony_streets/containers) "nta" = ( /obj/structure/machinery/light{ dir = 8; @@ -24675,7 +24712,7 @@ icon_state = "S" }, /turf/open/floor/strata/floor3, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "ntQ" = ( /obj/structure/surface/table/reinforced/prison, /obj/effect/decal/cleanable/dirt, @@ -26518,7 +26555,7 @@ /area/lv522/indoors/a_block/bridges/corpo) "opp" = ( /turf/closed/wall/shiva/prefabricated/reinforced, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "opt" = ( /obj/item/storage/backpack/marine/satchel{ desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"; @@ -26888,6 +26925,9 @@ }, /turf/open/floor/prison/blue_plate, /area/lv522/indoors/a_block/admin) +"oyG" = ( +/turf/open/asphalt/cement/cement12, +/area/lv522/outdoors/colony_streets/containers) "oyM" = ( /obj/structure/machinery/shower{ pixel_y = 16 @@ -35214,7 +35254,7 @@ "sBX" = ( /obj/structure/cargo_container/wy/right, /turf/open/floor/prison, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "sCb" = ( /obj/structure/platform_decoration{ dir = 8 @@ -46389,7 +46429,7 @@ "xSN" = ( /obj/structure/largecrate/random/secure, /turf/open/auto_turf/shale/layer1, -/area/lv522/outdoors/colony_streets/north_east_street) +/area/lv522/outdoors/colony_streets/containers) "xSP" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin{ @@ -46785,7 +46825,7 @@ /area/lv522/indoors/a_block/kitchen) "ycw" = ( /turf/open/floor/prison, -/area/lv522/atmos/cargo_intake) +/area/lv522/outdoors/colony_streets/containers) "ycE" = ( /turf/open/floor/carpet, /area/lv522/indoors/b_block/bar) @@ -76528,13 +76568,13 @@ cpy cpy cpy cpy -dHF +fkW fdS -dHF -dHF -dHF -dHF -dHF +fkW +fkW +fkW +fkW +fkW haR ien ien @@ -76735,13 +76775,13 @@ cpy cpy ien eXe -vGp -vGp -qSH -qSH +aHA +aHA +dqy +dqy eJq -qSH -qSH +dqy +dqy hmz ien cpy @@ -76941,13 +76981,13 @@ ien ien ien ien -vGp -vGp -qSH +aHA +aHA +dqy ggM -qSH -qSH -qSH +dqy +dqy +dqy hmz ien cpy @@ -77146,14 +77186,14 @@ ien kBK kBK ien -vGp -vGp -vGp -qSH -qSH -qSH -qSH -qSH +aHA +aHA +aHA +dqy +dqy +dqy +dqy +dqy ien ien ien @@ -77350,17 +77390,17 @@ cpy ien xSN kBK -vGp +aHA ntN -vGp -vGp -qSH -qSH -qSH -qSH -qSH -vGp -vGp +aHA +aHA +dqy +dqy +dqy +dqy +dqy +aHA +aHA ien cpy dRL @@ -77554,18 +77594,18 @@ cpy cpy cpy ien -vGp -vGp -vGp +aHA +aHA +aHA ntN -vGp -qSH -qSH -qSH +aHA +dqy +dqy +dqy ghr -qSH -qSH -vGp +dqy +dqy +aHA cpy ien cpy @@ -77761,16 +77801,16 @@ cpy ien ien ien -vGp -vGp +aHA +aHA ntN -qSH -qSH -qSH -qSH -qSH -qSH -vGp +dqy +dqy +dqy +dqy +dqy +dqy +aHA cpy ien ien @@ -77967,15 +78007,15 @@ cpy cpy ien kBK -vGp -vGp +aHA +aHA ntN -qSH -qSH -qSH -qSH -qSH -vGp +dqy +dqy +dqy +dqy +dqy +aHA cpy cpy cpy @@ -78174,15 +78214,15 @@ cpy ien xSN xSN -vGp +aHA ien -vGp +aHA eXe -qSH -qSH -qSH -vGp -vGp +dqy +dqy +dqy +aHA +aHA cpy cpy ien @@ -78383,13 +78423,13 @@ ien ien ien ien -vGp -vGp -qSH -qSH -qSH -vGp -vGp +aHA +aHA +dqy +dqy +dqy +aHA +aHA ien ien ien @@ -78586,16 +78626,16 @@ cpy ien xSN mee -vGp +aHA ien -vGp -vGp -qSH -qSH -qSH -qSH -qSH -vGp +aHA +aHA +dqy +dqy +dqy +dqy +dqy +aHA cpy ien cpy @@ -78791,18 +78831,18 @@ cpy cpy ien mee -vGp -vGp -vGp -vGp -qSH -qSH -qSH -qSH -qSH -qSH -qSH -vGp +aHA +aHA +aHA +aHA +dqy +dqy +dqy +dqy +dqy +dqy +dqy +aHA ien cpy dRL @@ -78998,16 +79038,16 @@ ien ien ien ewe -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -vGp +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +aHA ien ien gwC @@ -79204,27 +79244,27 @@ cpy ien eoH dbs -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy ien ien ien ien ien -dHF -dHF -dHF -dHF +fkW +fkW +fkW +fkW ien ien whD @@ -79411,26 +79451,26 @@ ien aCJ ewm eIn -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -vGp -vGp -vGp -vGp -vGp +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +aHA +aHA +aHA +aHA +aHA ien -vGp -vGp -vGp -vGp -vGp +aHA +aHA +aHA +aHA +aHA ien lyP vGp @@ -79616,27 +79656,27 @@ ien ien ien ewp -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -vGp -vGp -vGp -vGp -vGp -vGp -vGp -vGp -vGp -vGp -vGp -vGp +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +aHA +aHA +aHA +aHA +aHA +aHA +aHA +aHA +aHA +aHA +aHA +aHA ien mbx vGp @@ -79820,28 +79860,28 @@ cpy cpy cpy ien -qSH -qSH -oiA -vTx -vTx -vTx -vTx -vTx -vTx -vTx -vTx -vTx -qSH +dqy +dqy +iVX +imF +imF +imF +imF +imF +imF +imF +imF +imF +dqy eXV hTg -qSH -vTx -vTx -vTx -vGp -vGp -vGp +dqy +imF +imF +imF +aHA +aHA +aHA ien ien ien @@ -80026,9 +80066,9 @@ cpy cpy cpy ien -qSH -qSH -uRb +dqy +dqy +inO opp opp feS @@ -80038,17 +80078,17 @@ ghy fFp feS feS -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy eJq opp opp -vGp -vGp -vGp -vGp +aHA +aHA +aHA +aHA qBQ kyH fbA @@ -80233,8 +80273,8 @@ cpy ien ien ien -qSH -uRb +dqy +inO opp ycw ycw @@ -80245,16 +80285,16 @@ ycw ycw ycw eJq -qSH +dqy hTh eXV -qSH -qSH +dqy +dqy opp -qSH -qSH -vGp -vGp +dqy +dqy +aHA +aHA rdq saY vGp @@ -80438,28 +80478,28 @@ cpy cpy cpy ien -qSH -qSH -uRb +dqy +dqy +inO eOe ycw feZ feZ -fSf +dqy feZ feZ feZ hbj feZ feZ -qSH -qSH -qSH -qSH -qSH -qSH -qSH -vGp +dqy +dqy +dqy +dqy +dqy +dqy +dqy +aHA ien ien ien @@ -80644,9 +80684,9 @@ cpy cpy cpy ien -qSH -qSH -uRb +dqy +dqy +inO eOe eXO feZ @@ -80658,15 +80698,15 @@ ycw ycw ycw feZ -qSH -qSH -qSH -qSH -qSH -qSH -qSH -qSH -vGp +dqy +dqy +dqy +dqy +dqy +dqy +dqy +dqy +aHA ien rwo vGp @@ -80851,8 +80891,8 @@ cpy ien ien ien -qSH -uRb +dqy +inO eOe ycw ffr @@ -80865,14 +80905,14 @@ fBU ycw feZ eJq -qSH -qSH -qSH -qSH -ezj -qSH -qSH -qSH +dqy +dqy +dqy +dqy +oyG +dqy +dqy +dqy ien jvo vGp @@ -81056,9 +81096,9 @@ cpy cpy cpy ien -amc +nsL exB -uRb +inO eOe ycw fhY @@ -81071,13 +81111,13 @@ hbH ycw feZ ycw -qSH -qSH +dqy +dqy eXV -qSH -ezj -qSH -qSH +dqy +oyG +dqy +dqy ien ien ien @@ -81262,29 +81302,29 @@ cpy cpy cpy ien -poZ -qSH -uRb +hRb +dqy +inO eOn ycw fib fBU fTi -qSH -qSH +dqy +dqy sBX ycw ycw feZ ycw -qSH -qSH -qSH +dqy +dqy +dqy jEa jMJ -qSH -qSH -qSH +dqy +dqy +dqy ien amc qSH @@ -81469,28 +81509,28 @@ cpy ien ien ien -qSH -uRb +dqy +inO eOn ycw feZ fCE fTO -qSH +dqy gLK -qSH +dqy ycw ycw feZ ycw ycw -qSH -qSH +dqy +dqy jEk -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy ien poZ qSH @@ -81674,9 +81714,9 @@ cpy cpy cpy ien -qSH -qSH -uRb +dqy +dqy +inO eOe ycw fiA @@ -81691,11 +81731,11 @@ hFu hFu hFu hFu -qSH +dqy jEF -qSH -qSH -qSH +dqy +dqy +dqy ien ien ien @@ -81880,9 +81920,9 @@ cpy cpy cpy ien -qSH -qSH -uRb +dqy +dqy +inO eOn ycw feZ @@ -81897,12 +81937,12 @@ hFS ycw ycw ycw -qSH -qSH +dqy +dqy eJq -qSH -qSH -qSH +dqy +dqy +dqy ien fjk qSH @@ -82087,9 +82127,9 @@ cpy ien ien ien -qSH -uRb -eOe +dqy +inO +lsR ycw fkb ycw @@ -82103,12 +82143,12 @@ feZ eXO ycw ycw -qSH -qSH -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy +dqy +dqy ien igg rMR @@ -82292,9 +82332,9 @@ cpy cpy cpy ien -qSH -qSH -uRb +dqy +dqy +inO eOe ycw feZ @@ -82309,11 +82349,11 @@ hGJ ycw ier ycw -qSH -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy +dqy ien ien ien @@ -82498,9 +82538,9 @@ cpy cpy cpy ien -qSH -qSH -uRb +dqy +dqy +inO eOe ycw feZ @@ -82515,12 +82555,12 @@ hGU ycw ieW ycw -qSH -qSH +dqy +dqy exB -qSH -qSH -qSH +dqy +dqy +dqy ntN qSH qSH @@ -82705,10 +82745,10 @@ cpy ien ien ien -qSH -uRb -qSH -qSH +dqy +inO +dqy +dqy eXV ycw ycw @@ -82721,12 +82761,12 @@ hHN ycw iff ycw -qSH +dqy eXV -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy ntN qSH qSH @@ -82910,29 +82950,29 @@ cpy cpy cpy ien -vGp -qSH -qSH -qSH +aHA +dqy +dqy +dqy eJq -qSH -qSH +dqy +dqy ycw ycw ycw -fSf +dqy fTi ycw feZ ycw -qSH +dqy ycw -qSH -qSH +dqy +dqy ghr -qSH -qSH -qSH +dqy +dqy +dqy ntN qSH qSH @@ -83116,13 +83156,13 @@ cpy cpy cpy ien -vGp -vGp -qSH -qSH -qSH -qSH -qSH +aHA +aHA +dqy +dqy +dqy +dqy +dqy ycw ycw ycw @@ -83133,12 +83173,12 @@ feZ ycw ycw ycw -qSH -qSH -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy +dqy +dqy ntN qSH qSH @@ -83323,12 +83363,12 @@ cpy ien ien ien -vGp +aHA eIT exB -qSH -qSH -qSH +dqy +dqy +dqy ycw gjm ycw @@ -83339,12 +83379,12 @@ hFu hFu hFu hFu -qSH -qSH -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy +dqy +dqy ntN qSH qSH @@ -83528,12 +83568,12 @@ cpy cpy cpy enG -vGp -fbA -qSH -qSH -qSH -qSH +aHA +ddd +dqy +dqy +dqy +dqy ycw ycw gjV @@ -83544,13 +83584,13 @@ ycw feZ ycw ycw -qSH -qSH +dqy +dqy eXV exB -qSH -qSH -qSH +dqy +dqy +dqy ntN qSH qSH @@ -83734,12 +83774,12 @@ cpy cpy cpy ien -saY -vGp -qSH -qSH -qSH -qSH +dTD +aHA +dqy +dqy +dqy +dqy ycw ycw gjV @@ -83750,12 +83790,12 @@ fTO feZ hTk eXO -qSH -qSH -qSH -qSH -qSH -qSH +dqy +dqy +dqy +dqy +dqy +dqy ien ien ien @@ -83941,11 +83981,11 @@ cpy ien ien ien -vGp +aHA eJq -qSH +dqy eXV -qSH +dqy fDi ycw gmb @@ -83956,13 +83996,13 @@ ycw feZ hmO ycw -qSH -qSH -qSH -qSH -qSH -qSH -vGp +dqy +dqy +dqy +dqy +dqy +dqy +aHA ien qSH qSH @@ -84146,29 +84186,29 @@ cpy cpy cpy ien -vGp -vGp -qSH -qSH -qSH +aHA +aHA +dqy +dqy +dqy exB fDn fXs fkb feZ feZ -qSH +dqy feZ feZ hTo fCP -qSH -qSH -qSH -jNY -qSH -vGp -vGp +dqy +dqy +dqy +oyG +dqy +aHA +aHA ien qSH qSH @@ -84352,28 +84392,28 @@ cpy cpy cpy ien -vGp -vGp -qSH -eOA -qSH -qSH +aHA +aHA +dqy +opp +dqy +dqy fDH ycw ycw giF ycw -qSH +dqy ycw ycw ycw ycw eXV -qSH +dqy opp -jNY -vGp -vGp +oyG +aHA +aHA ien ien ien @@ -84559,11 +84599,11 @@ cpy ien ien ien -vGp -qSH -eOA -eOA -qSH +aHA +dqy +opp +opp +dqy fFp fFp gmt @@ -84574,13 +84614,13 @@ fFp hHY ghy fFp -qSH +dqy opp opp -jNY -vGp -vGp -vGp +oyG +aHA +aHA +aHA ien qSH qSH @@ -84765,26 +84805,26 @@ cpy cpy ien kBK -qSH -qSH -qSH -qSH -qSH -qSH -fXU +dqy +dqy +dqy +dqy +dqy +dqy +fkW gnd gnd gXE -fXU -fXU -qSH -vGp -fXU -fXU -fXU -fXU +fkW +fkW +dqy +aHA +fkW +fkW +fkW +fkW jOh -vGp +aHA cpy cpy ien @@ -84971,25 +85011,25 @@ cpy cpy ien xSN -vGp -vGp -vGp -qSH -qSH -qSH -qSH +aHA +aHA +aHA +dqy +dqy +dqy +dqy gnA -uwF -qSH +gnd +dqy hcx -rcr -qSH -qSH -vGp -vGp -vGp -vGp -vGp +moC +dqy +dqy +aHA +aHA +aHA +aHA +aHA cpy cpy ien @@ -85178,23 +85218,23 @@ ien ien ien xSN -vGp +aHA ien -vGp -qSH -vGp +aHA +dqy +aHA cpy cpy cpy cpy hcV hnD -qSH -qSH -vGp -mRs -vGp -vGp +dqy +dqy +aHA +cxN +aHA +aHA cpy cpy cpy @@ -85387,18 +85427,18 @@ ien ien ien ien -vGp +aHA cpy cpy cpy cpy cpy cpy -mRs -qSH -qSH -qSH -vGp +cxN +dqy +dqy +dqy +aHA cpy cpy cpy @@ -85602,8 +85642,8 @@ cpy cpy cpy cpy -qSH -qSH +dqy +dqy cpy cpy cpy diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 5ee138c5d5ad..9b2ce3953293 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -18192,10 +18192,7 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/l_a_p) "dAl" = ( -/obj/item/paper_bin/wy, /obj/structure/surface/table/woodentable/fancy, -/obj/item/tool/pen/clicky, -/obj/item/tool/pen/clicky, /obj/structure/machinery/status_display{ pixel_x = -32 }, @@ -21089,6 +21086,10 @@ pixel_x = -10; pixel_y = 8 }, +/obj/item/paper_bin/wy{ + pixel_x = 17; + pixel_y = 6 + }, /turf/open/floor/carpet, /area/almayer/command/corporateliaison) "eGq" = ( @@ -22404,13 +22405,29 @@ /turf/open/floor/almayer, /area/almayer/maint/hull/upper/u_f_s) "fiE" = ( -/obj/structure/machinery/computer/cameras/containment/hidden{ +/obj/structure/surface/table/almayer, +/obj/structure/machinery/door_display/research_cell{ dir = 4; - pixel_x = -17 + id = "Containment Cell 4"; + name = "Control Panel"; + pixel_x = -17; + req_access_txt = "200"; + pixel_y = 9 }, -/obj/structure/surface/table/almayer, /obj/item/storage/photo_album, -/obj/item/device/camera_film, +/obj/structure/machinery/computer/cameras/containment/hidden{ + dir = 4; + pixel_x = -17; + pixel_y = -5; + plane = -5 + }, +/obj/item/device/camera_film{ + pixel_x = -3 + }, +/obj/structure/machinery/door_control/cl/office/divider{ + pixel_x = 7; + pixel_y = -7 + }, /turf/open/floor/almayer, /area/almayer/command/corporateliaison) "fiQ" = ( @@ -41498,19 +41515,22 @@ /obj/structure/surface/rack, /obj/item/reagent_container/food/snacks/monkeycube/wrapped/farwacube{ pixel_x = 4; - pixel_y = 4 + pixel_y = 10 }, /obj/item/reagent_container/food/snacks/monkeycube/wrapped/neaeracube{ pixel_x = -4; - pixel_y = 4 + pixel_y = 10 }, /obj/item/reagent_container/food/snacks/monkeycube/wrapped/stokcube{ pixel_x = -4; - pixel_y = -4 + pixel_y = 2 }, /obj/item/reagent_container/food/snacks/monkeycube/wrapped/yirencube{ pixel_x = 4; - pixel_y = -4 + pixel_y = 2 + }, +/obj/item/storage/xeno_tag_case/full{ + pixel_y = -6 }, /turf/open/floor/almayer/plate, /area/almayer/command/corporateliaison) @@ -43075,16 +43095,22 @@ "nOb" = ( /obj/structure/surface/rack, /obj/item/reagent_container/food/drinks/bottle/sake{ - pixel_x = 5; - pixel_y = 5 + pixel_y = -3; + pixel_x = 4; + plane = -5 }, /obj/item/reagent_container/food/drinks/bottle/sake{ - pixel_x = 5; + pixel_x = 4; pixel_y = 5 }, -/obj/item/reagent_container/food/drinks/bottle/sake, /obj/item/reagent_container/food/drinks/bottle/sake{ - pixel_x = -4 + pixel_x = -4; + pixel_y = -3; + plane = -5 + }, +/obj/item/reagent_container/food/drinks/bottle/sake{ + pixel_x = -4; + pixel_y = 5 }, /obj/structure/machinery/light, /turf/open/floor/almayer/plate, @@ -45406,7 +45432,7 @@ pixel_x = -5; pixel_y = 4 }, -/obj/structure/machinery/door_control/cl/office/divider{ +/obj/structure/machinery/door_control/cl/quarter/windows{ pixel_x = -5; pixel_y = -3 }, @@ -47426,13 +47452,6 @@ /turf/open/floor/almayer/cargo_arrow/west, /area/almayer/squads/bravo) "pyx" = ( -/obj/structure/machinery/door_display/research_cell{ - dir = 4; - id = "Containment Cell 4"; - name = "Control Panel"; - pixel_x = -15; - req_access_txt = "200" - }, /obj/item/storage/fancy/cigarettes/blackpack{ pixel_x = -1; pixel_y = 1 @@ -47445,6 +47464,12 @@ /obj/item/tool/lighter/zippo/gold{ pixel_x = 2 }, +/obj/structure/machinery/computer/cameras/wooden_tv/broadcast{ + dir = 4; + layer = 3.2; + pixel_x = -15; + pixel_y = 1 + }, /turf/open/floor/carpet, /area/almayer/command/corporateliaison) "pyy" = ( @@ -51687,12 +51712,6 @@ /area/almayer/engineering/lower/engine_core) "rjV" = ( /obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/cameras/wooden_tv/broadcast{ - dir = 8; - layer = 3.2; - pixel_x = -3; - pixel_y = 6 - }, /obj/structure/sign/poster{ desc = "YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE."; icon_state = "poster11"; @@ -51718,6 +51737,12 @@ /obj/structure/machinery/light{ dir = 4 }, +/obj/structure/machinery/computer/cameras/wooden_tv/broadcast{ + dir = 8; + layer = 3.2; + pixel_x = -3; + pixel_y = 6 + }, /turf/open/floor/almayer/blue/southeast, /area/almayer/living/port_emb) "rjX" = ( @@ -52807,6 +52832,15 @@ req_one_access_txt = "200" }, /obj/structure/surface/table/woodentable/fancy, +/obj/item/tool/pen/clicky{ + pixel_x = 14; + plane = -5; + pixel_y = 2 + }, +/obj/item/tool/pen/clicky{ + pixel_x = 14; + pixel_y = 6 + }, /turf/open/floor/carpet, /area/almayer/command/corporateliaison) "rHc" = ( @@ -57190,18 +57224,17 @@ "ttX" = ( /obj/structure/surface/table/almayer, /obj/item/storage/firstaid/regular{ - pixel_x = 8; - pixel_y = -2 + pixel_y = 6 }, /obj/item/storage/box/drinkingglasses{ - pixel_x = -7 + pixel_x = -8 }, /obj/item/reagent_container/spray/cleaner{ pixel_x = -10; pixel_y = 14 }, -/obj/item/storage/xeno_tag_case/full{ - pixel_y = 8 +/obj/item/storage/box/wy_mre{ + pixel_x = 8 }, /turf/open/floor/almayer/plate, /area/almayer/command/corporateliaison) @@ -67217,10 +67250,8 @@ /turf/closed/wall/almayer, /area/almayer/command/securestorage) "xqQ" = ( -/obj/structure/machinery/door/poddoor/almayer/blended{ - id = "RoomDivider"; - layer = 3.1; - name = "\improper Room Divider" +/obj/structure/machinery/door/poddoor/almayer/blended/liaison{ + id = "RoomDivider" }, /turf/open/floor/almayer/plate, /area/almayer/command/corporateliaison) @@ -102256,7 +102287,7 @@ bdH bdH bdH bdH -aaa +bdH aaa aaa aaa @@ -102868,7 +102899,7 @@ bdH aaa aaa aaa -aaa +bdH aaa aaa aaa @@ -103273,7 +103304,7 @@ aaa aaa aaa aaa -aaa +bdH aaa aaa aaa diff --git a/tgui/packages/tgui/components/Button.tsx b/tgui/packages/tgui/components/Button.tsx index 76ff79a60c75..c6e39264fd32 100644 --- a/tgui/packages/tgui/components/Button.tsx +++ b/tgui/packages/tgui/components/Button.tsx @@ -256,7 +256,7 @@ const ButtonConfirm = (props: ConfirmProps) => { }} {...rest} > - {clickedOnce ? confirmContent : children} + {clickedOnce && confirmContent ? confirmContent : children} ); }; diff --git a/tgui/packages/tgui/interfaces/BodyPicker.tsx b/tgui/packages/tgui/interfaces/BodyPicker.tsx new file mode 100644 index 000000000000..4ca0c03acdf7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyPicker.tsx @@ -0,0 +1,183 @@ +import { useState } from 'react'; + +import { useBackend } from '../backend'; +import { + Box, + Button, + ColorBox, + DmIcon, + Modal, + Stack, + Tooltip, +} from '../components'; +import { Window } from '../layouts'; + +type PickerData = { + icon: string; + body_types: { name: string; icon: string }[]; + skin_colors: { name: string; icon: string; color: string }[]; + body_sizes: { name: string; icon: string }[]; + + body_type: string; + skin_color: string; + body_size: string; +}; + +export const BodyPicker = () => { + const { data } = useBackend(); + + const { icon, body_size, body_type, skin_color, body_types, body_sizes } = + data; + + const [picker, setPicker] = useState<'type' | 'size' | undefined>(); + + const unselectedBodyType = body_types.filter( + (val) => val.icon !== body_type, + )[0]; + + const unselectedBodySize = body_sizes.filter( + (val) => val.icon !== body_size, + )[0]; + + return ( + + + {picker && ( + + + + )} + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +const TypePicker = (props: { + readonly picker: (_) => void; + readonly toUse: 'type' | 'size'; +}) => { + const { data, act } = useBackend(); + + const { picker, toUse } = props; + + const { body_type, body_types, skin_color, body_size, body_sizes, icon } = + data; + + const toIterate = toUse === 'type' ? body_types : body_sizes; + + const active = toUse === 'type' ? body_type : body_size; + + return ( + + {toIterate.map((type) => ( + + + { + picker(undefined); + act(toUse, { name: type.name }); + }} + position="relative" + className={`typePicker ${active === type.icon ? 'active' : ''}`} + > + + + + + ))} + + ); +}; + +const ColorOptions = () => { + const { data, act } = useBackend(); + + const { skin_color, skin_colors } = data; + + return ( + + {skin_colors.map((color) => ( + + act('color', { name: color.name })} + className={`colorPicker ${skin_color === color.icon ? 'active' : ''}`} + /> + + ))} + + ); +}; diff --git a/tgui/packages/tgui/styles/interfaces/BodyPicker.scss b/tgui/packages/tgui/styles/interfaces/BodyPicker.scss new file mode 100644 index 000000000000..d60cd2112493 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/BodyPicker.scss @@ -0,0 +1,19 @@ +.theme-crtblue { + .BodyPicker { + .Stack--horizontal > .colorPickerContainer:first-of-type { + margin-left: 6px; + } + + .typePicker { + border: 1px dotted #8ac8ff; + } + + .typePicker.active { + border: 1px solid #8ac8ff; + } + + .colorPicker.active { + outline: solid 2px #8ac8ff; + } + } +} diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss index 2f9bf90463d7..3803da7a9237 100644 --- a/tgui/packages/tgui/styles/main.scss +++ b/tgui/packages/tgui/styles/main.scss @@ -48,6 +48,7 @@ @include meta.load-css('./components/Tooltip.scss'); // Interfaces +@include meta.load-css('./interfaces/BodyPicker.scss'); @include meta.load-css('./interfaces/Changelog.scss'); @include meta.load-css('./interfaces/ListInput.scss'); @include meta.load-css('./interfaces/CasSim.scss'); diff --git a/tgui/packages/tgui/styles/themes/crt.scss b/tgui/packages/tgui/styles/themes/crt.scss index 9f9436f275a3..87c0bd58ad14 100644 --- a/tgui/packages/tgui/styles/themes/crt.scss +++ b/tgui/packages/tgui/styles/themes/crt.scss @@ -99,6 +99,11 @@ $background-radial-opacity: 0.2 !default; ) ); + @include meta.load-css( + '../components/Modal.scss', + $with: ('background-color': base.$color-bg) + ); + .Layout__content { background-image: none; background: radial-gradient(