diff --git a/baystation12.dme b/baystation12.dme index 2a8c5729dd4ea..6c3d56ef5cc19 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -3333,6 +3333,7 @@ #include "mods\_master_files\code\game\world.dm" #include "mods\_master_files\code\game\gamemodes\ert.dm" #include "mods\_master_files\code\game\objects\effects\decals\contraband.dm" +#include "mods\_master_files\code\game\objects\structures\signs.dm" #include "mods\_master_files\code\game\objects\structures\crates_lockers\closets\_closet_appearance_definitions.dm" #include "mods\_master_files\code\modules\client\asset_cache.dm" #include "mods\_master_files\code\modules\client\preferences_persist.dm" diff --git a/code/__defines/health.dm b/code/__defines/health.dm index c95c5d6314af4..1e47dfcfa94bb 100644 --- a/code/__defines/health.dm +++ b/code/__defines/health.dm @@ -85,3 +85,17 @@ #define DAMAGE_FLAG_DISPERSED FLAG(7) /// Toxin damage that should be mitigated by biological (i.e. sterile) armor #define DAMAGE_FLAG_BIO FLAG(8) + + +/// Health Status flags for `/atom/var/health_status`. +/// The atom is currently dead. +#define HEALTH_STATUS_DEAD FLAG(0) +/// The atom is currently broken. An atom is `broken` if `HEALTH_FLAG_BREAKABLE` is set and the atom's health falls below 1/2 of `health_max`. Used for certain atoms that needed an additional damage state. +#define HEALTH_STATUS_BROKEN FLAG(1) + + +/// Health Flags for `/atom/var/health_flags`. +/// The atom is 'breakable', and considered broken upon reaching 1/2 health. +#define HEALTH_FLAG_BREAKABLE FLAG(0) +/// The atom should be treated as a structure for damage calculations. +#define HEALTH_FLAG_STRUCTURE FLAG(1) diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm index a0212eba18f02..a2d97f56b610d 100644 --- a/code/__defines/items_clothing.dm +++ b/code/__defines/items_clothing.dm @@ -20,24 +20,24 @@ #define SLOT_TIE FLAG(14) #define SLOT_HOLSTER FLAG(15) -#define ACCESSORY_SLOT_UTILITY "Utility" -#define ACCESSORY_SLOT_HOLSTER "Holster" -#define ACCESSORY_SLOT_ARMBAND "Armband" -#define ACCESSORY_SLOT_RANK "Rank" -#define ACCESSORY_SLOT_DEPT "Department" -#define ACCESSORY_SLOT_DECOR "Decor" -#define ACCESSORY_SLOT_MEDAL "Medal" -#define ACCESSORY_SLOT_INSIGNIA "Insignia" -#define ACCESSORY_SLOT_ARMOR_C "Chest armor" -#define ACCESSORY_SLOT_ARMOR_A "Arm armor" -#define ACCESSORY_SLOT_ARMOR_L "Leg armor" -#define ACCESSORY_SLOT_ARMOR_S "Armor storage" -#define ACCESSORY_SLOT_ARMOR_M "Misc armor" -#define ACCESSORY_SLOT_HELM_C "Helmet cover" -#define ACCESSORY_SLOT_HELM_D "Helmet decor" -#define ACCESSORY_SLOT_VISOR "Helmet visor" -#define ACCESSORY_SLOT_VISION "Vision modification" -#define ACCESSORY_SLOT_HUD "HUD modification" +#define ACCESSORY_SLOT_UTILITY "CU" +#define ACCESSORY_SLOT_HOLSTER "CH" +#define ACCESSORY_SLOT_ARMBAND "CA" +#define ACCESSORY_SLOT_RANK "CR" +#define ACCESSORY_SLOT_FLASH "CF" +#define ACCESSORY_SLOT_DECOR "CD" +#define ACCESSORY_SLOT_MEDAL "CM" +#define ACCESSORY_SLOT_INSIGNIA "CI" +#define ACCESSORY_SLOT_ARMOR_CHEST "AC" +#define ACCESSORY_SLOT_ARMOR_ARMS "AA" +#define ACCESSORY_SLOT_ARMOR_LEGS "AL" +#define ACCESSORY_SLOT_ARMOR_STORAGE "AS" +#define ACCESSORY_SLOT_ARMOR_MISC "AM" +#define ACCESSORY_SLOT_HELMET_COVER "HC" +#define ACCESSORY_SLOT_HELMET_DECOR "HD" +#define ACCESSORY_SLOT_HELMET_VISOR "HV" +#define ACCESSORY_SLOT_GLASSES_VISION "GV" +#define ACCESSORY_SLOT_GLASSES_HUD "GH" #define ACCESSORY_REMOVABLE FLAG(0) #define ACCESSORY_HIDDEN FLAG(1) diff --git a/code/__defines/~mods/~master_defines.dm b/code/__defines/~mods/~master_defines.dm index a56f067ae074a..60d724c789cfa 100644 --- a/code/__defines/~mods/~master_defines.dm +++ b/code/__defines/~mods/~master_defines.dm @@ -46,6 +46,15 @@ // DON_LOADOUT - End +// GUNS - Start +#define GUN_BULK_PISTOL 1 +#define GUN_BULK_REVOLVER 2 +#define GUN_BULK_SMG 3 +#define GUN_BULK_CARABINE 4 +#define GUN_BULK_SNIPER_RIFLE 6 +#define GUN_BULK_MACHINEGUN 7 +// GUNS - End + // GLIDING - Start #define DELAY2GLIDESIZE(delay) (world.icon_size / max(ceil(delay / world.tick_lag), 1)) // GLIDING - End diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index 6bb954ff40cf9..80e038d843e59 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -46,9 +46,21 @@ /obj/screen/movable/proc/encode_screen_X(X, mob/viewer) var/view = viewer.client ? viewer.client.view : world.view - if(X > view+1) - . = "EAST-[view*2 + 1-X]" - else if(X < view+1) + // [SIERRA-EDIT] + // if(X > view+1) // SIERA-EDIT - ORIGINAL + // . = "EAST-[view*2 + 1-X]" // SIERA-EDIT - ORIGINAL + // else if(X < view+1) // SIERA-EDIT - ORIGINAL + var/local_view + if(view == "19x15") + local_view = 9 + else if(view == "17x15") + local_view = 8 + else if(view == "15x15") + local_view = 7 + // [/SIERRA-EDIT] + if(X > local_view+1) + . = "EAST-[local_view*2 + 1-X]" + else if(X < local_view+1) . = "WEST+[X-1]" else . = "CENTER" @@ -71,9 +83,18 @@ /obj/screen/movable/proc/encode_screen_Y(Y, mob/viewer) var/view = viewer.client ? viewer.client.view : world.view - if(Y > view+1) - . = "NORTH-[view*2 + 1-Y]" - else if(Y < viewer.client.view+1) + // [SIERRA-EDIT] + // if(Y > view+1) // SIERA-EDIT - ORIGINAL + // . = "NORTH-[view*2 + 1-Y]" // SIERA-EDIT - ORIGINAL + // else if(Y < viewer.client.view+1) // SIERA-EDIT - ORIGINAL + var/local_view + if(view == "19x15" || view == "17x15" || view == "15x15") + local_view = 7 + // [/SIERRA-EDIT] + if(Y > local_view+1) + + . = "NORTH-[local_view*2 + 1-Y]" + else if(Y < local_view+1) . = "SOUTH+[Y-1]" else . = "CENTER" diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 450a0130e7709..15dc0a3aa2174 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -1,11 +1,4 @@ -#define NEXT_PAGE_ID "__next__" -#define DEFAULT_CHECK_DELAY 20 - -var/global/list/radial_menus = list() - -/obj/screen/radial/Destroy() - parent = null - return ..() +GLOBAL_LIST_EMPTY(radial_menus) /obj/screen/radial icon = 'icons/screen/radial.dmi' @@ -13,6 +6,10 @@ var/global/list/radial_menus = list() plane = HUD_PLANE var/datum/radial_menu/parent +/obj/screen/radial/Destroy() + parent = null + return ..() + /obj/screen/radial/slice icon_state = "radial_slice" var/choice @@ -55,6 +52,9 @@ var/global/list/radial_menus = list() parent.finished = TRUE /datum/radial_menu + var/const/NEXT_PAGE_ID = "__next__" + var/const/DEFAULT_CHECK_DELAY = 2 SECONDS + var/list/choices = list() //List of choice id's var/list/choices_icons = list() //choice_id -> icon var/list/choices_values = list() //choice_id -> choice @@ -316,14 +316,14 @@ var/global/list/radial_menus = list() for(var/atom/thing in check_locs) check_locs[thing] = thing.loc - if(global.radial_menus[uniqueid]) + if(GLOB.radial_menus[uniqueid]) if(!no_repeat_close) - var/datum/radial_menu/menu = global.radial_menus[uniqueid] + var/datum/radial_menu/menu = GLOB.radial_menus[uniqueid] menu.finished = TRUE return var/datum/radial_menu/menu = new - global.radial_menus[uniqueid] = menu + GLOB.radial_menus[uniqueid] = menu if(radius) menu.radius = radius if(istype(custom_check)) @@ -335,7 +335,7 @@ var/global/list/radial_menus = list() menu.wait(user, anchor, require_near, check_locs) var/answer = menu.selected_choice qdel(menu) - global.radial_menus -= uniqueid + GLOB.radial_menus -= uniqueid return answer #define RADIAL_INPUT(user, choices) show_radial_menu(user, user, choices) diff --git a/code/_onclick/hud/radial_persistent.dm b/code/_onclick/hud/radial_persistent.dm index 6c71762b68b26..44c0ab009a8ec 100644 --- a/code/_onclick/hud/radial_persistent.dm +++ b/code/_onclick/hud/radial_persistent.dm @@ -37,7 +37,7 @@ /datum/radial_menu/persistent/Destroy() QDEL_NULL(select_proc_callback) - global.radial_menus -= uniqueid + GLOB.radial_menus -= uniqueid Reset() hide() return ..() @@ -55,12 +55,12 @@ if(!uniqueid) uniqueid = "defmenu_\ref[user]_\ref[anchor]" - if(global.radial_menus[uniqueid]) + if(GLOB.radial_menus[uniqueid]) return var/datum/radial_menu/persistent/menu = new menu.uniqueid = uniqueid - global.radial_menus[uniqueid] = menu + GLOB.radial_menus[uniqueid] = menu if(radius) menu.radius = radius menu.select_proc_callback = select_proc diff --git a/code/datums/outfits/misc.dm b/code/datums/outfits/misc.dm index 4ae5405578682..f1c50326789e0 100644 --- a/code/datums/outfits/misc.dm +++ b/code/datums/outfits/misc.dm @@ -70,3 +70,11 @@ id_types = list(/obj/item/card/id/syndicate) id_pda_assignment = "Scavenger" flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT + + +/singleton/hierarchy/outfit/anomalist + name = "Anomalist" + uniform = /obj/item/clothing/under/color/white + shoes = /obj/item/clothing/shoes/white + suit = /obj/item/clothing/suit/bio_suit/anomaly + head = /obj/item/clothing/head/bio_hood/anomaly diff --git a/code/datums/supplypacks/nonessent.dm b/code/datums/supplypacks/nonessent.dm index 57e1149b9af91..f3262fb42954d 100644 --- a/code/datums/supplypacks/nonessent.dm +++ b/code/datums/supplypacks/nonessent.dm @@ -249,7 +249,7 @@ -// [SIERRA-REMOVE] - MECHS_BY_SHEGAR - (Не нужны, т.к все эти типы камуфляжей есть в новом камуфляторы) +// [SIERRA-REMOVE] - Mechs_by_shegar - (Не нужны, т.к все эти типы камуфляжей есть в новом камуфляторы) /* /singleton/hierarchy/supply_pack/nonessent/exosuit_mod diff --git a/code/game/atoms.dm b/code/game/atoms.dm index a5dd9d49bf979..303f3d1cbc0c2 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -103,7 +103,6 @@ if (health_max) health_current = health_max - health_dead = FALSE return INITIALIZE_HINT_NORMAL @@ -303,7 +302,7 @@ . = 0 if (get_max_health()) var/damage = P.damage - if (istype(src, /obj/structure) || istype(src, /turf/simulated/wall) || istype(src, /obj/machinery)) // TODO Better conditions for non-structures that want to use structure damage + if (GET_FLAGS(health_flags, HEALTH_FLAG_STRUCTURE)) damage = P.get_structure_damage() if (!can_damage_health(damage, P.damage_type, P.damage_flags)) return diff --git a/code/game/atoms_health.dm b/code/game/atoms_health.dm index b3c43e897df09..0eab187013c5e 100644 --- a/code/game/atoms_health.dm +++ b/code/game/atoms_health.dm @@ -4,8 +4,11 @@ /// Maximum health for simple health processing. Use `get_max_health()` or `set_max_health()` to reference/modify. /atom/var/health_max -/// Boolean. Whether or not the atom is dead. Toggled by death state changes in standardized health and provided as a simple way to check for death without additional proc call overhead from `is_alive()`. -/atom/var/health_dead +/// Bitflag (Any of `HEALTH_STATUS_*`). Various health-related status flags for the atom. See `code\__defines\health.dm` for details. +/atom/var/health_status = EMPTY_BITFIELD + +/// Bitflag (Any of `HEALTH_FLAG_*`). Various health-related config flags for the atom. See `code\__defines\health.dm` for details. +/atom/var/health_flags = EMPTY_BITFIELD /** * LAZY List of damage type resistance or weakness multipliers, decimal form. Only applied to health reduction. Use `set_damage_resistance()`, `remove_damage_resistance()`, and `get_damage_resistance()` to reference/modify. @@ -48,9 +51,20 @@ /** * Whether or not the atom is currently dead. + * + * Returns boolean. */ /atom/proc/health_dead() - return health_dead + return HAS_FLAGS(health_status, HEALTH_STATUS_DEAD) + + +/** + * Whether or not the atom is currently broken. Does not consider death as broken, to minimize on recursive proc calls. + * + * Returns boolean. + */ +/atom/proc/health_broken() + return HAS_FLAGS(health_status, HEALTH_STATUS_BROKEN) /** @@ -111,15 +125,34 @@ return FALSE health_mod = round(health_mod) var/prior_health = get_current_health() - var/death_state = health_dead + var/death_state = health_dead() + var/broken_state = health_broken() + health_current = round(clamp(health_current + health_mod, 0, get_max_health())) post_health_change(health_mod, prior_health, damage_type) + + if (HAS_FLAGS(health_flags, HEALTH_FLAG_BREAKABLE)) + var/new_broken_state = health_current > floor(health_max / 2) ? FALSE : TRUE + if (new_broken_state != broken_state) + if (new_broken_state) + SET_FLAGS(health_status, HEALTH_STATUS_BROKEN) + else + CLEAR_FLAGS(health_status, HEALTH_STATUS_BROKEN) + if (!skip_death_state_change) + if (new_broken_state) + on_broken() + else + on_unbroken() + var/new_death_state = health_current > 0 ? FALSE : TRUE if (death_state == new_death_state) return FALSE - health_dead = new_death_state + if (new_death_state) + SET_FLAGS(health_status, HEALTH_STATUS_DEAD) + else + CLEAR_FLAGS(health_status, HEALTH_STATUS_DEAD) if (!skip_death_state_change) - if (health_dead) + if (new_death_state) on_death() else on_revive() @@ -192,6 +225,14 @@ /atom/proc/on_revive() return +/// Proc called when the atom transitions from unbroken to broken. Only used if `HEALTH_FLAG_BREAKABLE` is set. +/atom/proc/on_broken() + return + +/// Proc called when the atom transitions from broken to unbroken. Only used if `HEALTH_FLAG_BREAKABLE` is set. +/atom/proc/on_unbroken() + return + /** * Sets the atoms maximum health to the new value. * If `set_current_health` is `TRUE`, also sets the current health to the new value. @@ -292,4 +333,4 @@ target_atom.health_max = source_atom.health_max target_atom.health_resistances = source_atom.health_resistances target_atom.health_min_damage = source_atom.health_min_damage - target_atom.health_dead = source_atom.health_dead + target_atom.health_status = source_atom.health_status diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 3936985f1766e..b5121f2a33068 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -172,7 +172,15 @@ var/global/list/priv_region_access priv_region_access["[A.region]"] += A.id var/list/region = priv_region_access["[code]"] - return region.Copy() + //[SIERRA-EDIT] + //Позволяет избавиться от рантайма. + //return region.Copy() + + if(region) + return region.Copy() + else + return + //[SIERRA-EDIT] /proc/get_region_accesses_name(code) switch(code) diff --git a/code/game/machinery/_machines_base/machinery.dm b/code/game/machinery/_machines_base/machinery.dm index 817f55f4d0060..43b878aad8b1f 100644 --- a/code/game/machinery/_machines_base/machinery.dm +++ b/code/game/machinery/_machines_base/machinery.dm @@ -15,6 +15,7 @@ throw_range = 5 health_resistances = DAMAGE_RESIST_ELECTRICAL + health_flags = HEALTH_FLAG_STRUCTURE /// Boolean. Whether or not the machine has been emagged. var/emagged = FALSE diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index cc915ed707be3..7a24525eaba37 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -10,7 +10,18 @@ power_channel = EQUIP var/obj/item/cell/charging = null var/chargelevel = -1 + construct_state = /singleton/machine_construction/default/panel_closed + uncreated_component_parts = null +//Sierra add +/obj/machinery/cell_charger/Initialize() + . = ..() + RefreshParts() +/obj/machinery/cell_charger/RefreshParts() + for(var/obj/item/stock_parts/SP in component_parts) + if(istype(SP, /obj/item/stock_parts/capacitor)) + active_power_usage *= SP.rating +// Sierra add-end /obj/machinery/cell_charger/on_update_icon() icon_state = "ccharger[charging ? 1 : 0]" if(charging && operable()) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index be290e1942776..f44fd29b6f9b0 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -15,6 +15,17 @@ var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered var/portable = 1 + construct_state = /singleton/machine_construction/default/panel_closed + uncreated_component_parts = null + +/obj/machinery/recharger/Initialize() + . = ..() + RefreshParts() + +/obj/machinery/recharger/RefreshParts() + for(var/obj/item/stock_parts/SP in component_parts) + if(istype(SP, /obj/item/stock_parts/capacitor)) + active_power_usage *= SP.rating /obj/machinery/recharger/use_tool(obj/item/G, mob/living/user, list/click_params) var/allowed = 0 diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index e1541cd43bd2a..169137bae0889 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -478,6 +478,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() ..() server_radio = new() +// [SIERRA-REMOVE] MODPACK-TELECOMMS (Гитхаю жалуется) +/* /obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(signal.data["message"]) @@ -558,6 +560,9 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() if(!can_send) relay_information(signal, /obj/machinery/telecomms/broadcaster) +*/ +// [SIERRA-REMOVE] + /obj/machinery/telecomms/server/proc/update_logs() // start deleting the very first log entry if(logs >= 400) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 7be079a5ed206..1b47e1696e685 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -19,6 +19,7 @@ origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) + var/buffer var/buffer_name var/atom/buffer_object diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index ffe45bffaf5c7..7154b0c2b8632 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -81,7 +81,7 @@ return ..() // Mechs are handled in their attackby (mech_interaction.dm). -// [SIERRA-REMOVE] - MECHS_BY_SHEGAR - Не нужны +// [SIERRA-REMOVE] - Mechs_by_shegar - Не нужны /* diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 1349ceb1c8569..7865d3fd1ef95 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -38,8 +38,8 @@ /obj/item/stack/material/rods/Initialize() . = ..() update_icon() - throwforce = round(0.25*material.get_edge_damage()) - force = round(0.5*material.get_blunt_damage()) + throwforce = round(0.25) + force = round(0.5) /obj/item/stack/material/rods/use_tool(obj/item/W, mob/living/user, list/click_params) if(isWelder(W)) diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index c93cb6a381524..33a60f306a3b8 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -3,6 +3,7 @@ desc = "A roll of sticky tape. Possibly for taping ducks... or was that ducts?" icon = 'icons/obj/bureaucracy.dmi' icon_state = "taperoll" + matter = list(MATERIAL_PLASTIC = 100) w_class = ITEM_SIZE_SMALL /obj/item/tape_roll/use_before(mob/living/carbon/human/H, mob/user) diff --git a/code/game/objects/munition.dm b/code/game/objects/munition.dm index cdfcd5d545826..004020ec49120 100644 --- a/code/game/objects/munition.dm +++ b/code/game/objects/munition.dm @@ -1,6 +1,6 @@ /obj/structure/ship_munition name = "munitions" - icon = 'icons/obj/munitions.dmi' + icon = 'mods/utility_items/icons/munitions.dmi' w_class = ITEM_SIZE_GARGANTUAN density = TRUE var/list/move_sounds = list( // some nasty sounds to make when moving the board diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 94d7808b59d41..9aa8260cf6022 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -3,6 +3,8 @@ w_class = ITEM_SIZE_NO_CONTAINER layer = STRUCTURE_LAYER + health_flags = HEALTH_FLAG_STRUCTURE + var/fragile var/parts var/list/connections = list("0", "0", "0", "0") diff --git a/code/game/objects/structures/fireaxe_cabinet.dm b/code/game/objects/structures/fireaxe_cabinet.dm index cceb5b2a2fcba..ea7fc390a3195 100644 --- a/code/game/objects/structures/fireaxe_cabinet.dm +++ b/code/game/objects/structures/fireaxe_cabinet.dm @@ -25,7 +25,7 @@ ClearOverlays() if(fireaxe) AddOverlays(image(icon, "fireaxe_item")) - if(health_dead) + if(health_dead()) AddOverlays(image(icon, "fireaxe_window_broken")) else if(!open) AddOverlays(image(icon, "fireaxe_window")) @@ -93,7 +93,7 @@ var/obj/item/stack/material/stack = tool if (stack.material.name != MATERIAL_GLASS) return ..() - if (!health_dead && !health_damaged()) + if (!health_dead() && !health_damaged()) USE_FEEDBACK_FAILURE("\The [src] doesn't need repair.") return TRUE if (!stack.reinf_material) @@ -114,7 +114,7 @@ if (open) USE_FEEDBACK_FAILURE("\The [src] must be closed before you can lock it.") return TRUE - if (health_dead) + if (health_dead()) USE_FEEDBACK_FAILURE("\The [src] is shattered and the lock doesn't function.") return TRUE user.visible_message( @@ -136,7 +136,7 @@ /obj/structure/fireaxecabinet/proc/toggle_open(mob/user) - if(health_dead) + if(health_dead()) open = 1 unlocked = 1 else diff --git a/code/game/objects/structures/wall_frame.dm b/code/game/objects/structures/wall_frame.dm index 55548ab5d0fa8..933c2cf87df21 100644 --- a/code/game/objects/structures/wall_frame.dm +++ b/code/game/objects/structures/wall_frame.dm @@ -194,6 +194,10 @@ /obj/structure/wall_frame/titanium material = MATERIAL_TITANIUM + +/obj/structure/wall_frame/ocp + material = MATERIAL_OSMIUM_CARBIDE_PLASTEEL + /obj/structure/wall_frame/hull paint_color = COLOR_SOL diff --git a/code/game/objects/structures/wallframe_spawner.dm b/code/game/objects/structures/wallframe_spawner.dm index db723e9ce71b1..098f8383f1959 100644 --- a/code/game/objects/structures/wallframe_spawner.dm +++ b/code/game/objects/structures/wallframe_spawner.dm @@ -143,6 +143,8 @@ /obj/wallframe_spawn/reinforced_phoron/hull frame_path = /obj/structure/wall_frame/hull +/obj/wallframe_spawn/reinforced_phoron/ocp + frame_path = /obj/structure/wall_frame/ocp /obj/wallframe_spawn/reinforced/polarized name = "polarized reinforced wall frame window spawner" diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 6838e52753d2e..c9adce1661d20 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -9,6 +9,7 @@ thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall atom_flags = ATOM_FLAG_CAN_BE_PAINTED + health_flags = HEALTH_FLAG_STRUCTURE var/damage_overlay = 0 var/static/damage_overlays[16] diff --git a/code/game/world.dm b/code/game/world.dm index 4a3fc39135e16..b638efa8ba7c6 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -474,7 +474,6 @@ GLOBAL_VAR_INIT(world_topic_last, world.timeofday) var/amessage = SPAN_CLASS("staff_pm", "[rank] PM from [input["sender"]] to [key_name(C)] : [input["msg"]]") C.received_irc_pm = world.time - C.irc_admin = input["sender"] sound_to(C, sound('sound/ui/pm-notify.ogg', volume = 40)) to_chat(C, message) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 395d07e2345e8..f18c343eea407 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -187,6 +187,9 @@ var/global/list/admin_verbs_debug = list( /client/proc/delete_random_map, /datum/admins/proc/map_template_load, /datum/admins/proc/map_template_load_new_z, + //[SIERRA-ADD] - Colony types, + /datum/admins/proc/map_template_choose_colony_type, + //[SIERRA-ADD], /datum/admins/proc/map_template_upload, /client/proc/enable_debug_verbs, /client/proc/callproc, diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index ed5a84899f5ec..5bf316f7e73bd 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -71,7 +71,7 @@ var/global/list/adminhelp_ignored_words = list("unknown","the","a","an","of","mo to_chat(src, SPAN_COLOR("red", "Error: Admin-PM: You cannot send adminhelps (Muted).")) return - adminhelped = 1 //Determines if they get the message to reply by clicking the name. + adminhelped = TRUE //clean the input msg diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 2ced206de9084..c4be7e89a4eeb 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -105,7 +105,7 @@ recieve_message = "[SPAN_CLASS("pm", "[SPAN_CLASS("howto", "-- Click the [recieve_pm_type]'s name to reply --")]")]\n" if(C.adminhelped) to_chat(C, recieve_message) - C.adminhelped = 0 + C.adminhelped = FALSE var/sender_message = "[create_text_tag("pm_out_alt", "PM", src)] to [SPAN_CLASS("name", get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1))]" if(holder) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index d436345861667..5998a10716d0f 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -41,10 +41,13 @@ var/global/list/sounds_cache = list() set category = "Fun" set name = "Play Local Sound" if(!check_rights(R_SOUNDS)) return + var/vol = input("Select a volume for the sound", "Play Local Sound", 50) as num|null + if (!vol) + return log_admin("[key_name(src)] played a local sound [S]") message_admins("[key_name_admin(src)] played a local sound [S]", 1) - playsound(get_turf(src.mob), S, 50, 0, 0) + playsound(get_turf(src.mob), S, vol, 0, 0) /client/proc/play_server_sound() diff --git a/code/modules/admin/view_variables/vv_set_handlers.dm b/code/modules/admin/view_variables/vv_set_handlers.dm index 07bce527f4b11..ae3bfd663651a 100644 --- a/code/modules/admin/view_variables/vv_set_handlers.dm +++ b/code/modules/admin/view_variables/vv_set_handlers.dm @@ -145,7 +145,7 @@ predicates = list(GLOBAL_PROC_REF(is_strict_bool_predicate)) /singleton/vv_set_handler/health_dead_handler/handle_set_var(atom/target, variable, var_value, client) - if (var_value == target.health_dead) + if (var_value == target.health_dead()) return switch (var_value) if (TRUE) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 7afa107358e43..cff697465fd48 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -1,68 +1,58 @@ /client - ////////////////////// - //BLACK MAGIC THINGS// - ////////////////////// + // Allow client instances to be treated like regular datums parent_type = /datum - //////////////// - //ADMIN THINGS// - //////////////// - var/datum/admins/holder = null - var/datum/admins/deadmin_holder = null - - ///////// - //OTHER// - ///////// - var/datum/preferences/prefs = null - var/adminobs = null // Runechat messages var/list/seen_messages - ///datum that controls the displaying and hiding of tooltips - var/datum/tooltip/tooltips + /** At compile time, should be TRUE if serving the rsc from DD or FALSE if using other + http server(s) to spread load. Defaults FALSE as /client/New() handles setting either + a url from config.resource_urls, or TRUE if none exist + Refer to http://www.byond.com/forum/post/1906517?page=2#comment23727144 + */ + preload_rsc = FALSE + + /// When some kind of staff member, the client's permissions and behaviors + var/datum/admins/holder - var/adminhelped = 0 + /// When not currently wanting to see buttons, holder lives here instead + var/datum/admins/deadmin_holder + + /// The client's preferences object, populated from save data and runtime changes + var/datum/preferences/prefs + + /// Controls the display of tooltips to this client + var/datum/tooltip/tooltips - var/staffwarn = null + /// When starting an ahelp conversation, whether the client gets a reply button + var/adminhelped - /// List that stores the object and parameters related to the selected target during mouse events in the client. Allows the client to remember the target selected during a "MouseDown" event or update the selection during a "MouseDrag" event. - var/list/selected_target[2] + /// A message to show to online staff when joining, if any + var/staffwarn - /////////////// - //SOUND STUFF// - /////////////// + /// Holds click params [2] and a reference [1] to the atom under the cursor on MouseDown/Drag + var/list/selected_target = list(null, null) - /// Whether or not the client is currently playing the "ship hum" ambience sound. + /// Whether or not the client is currently playing the "ship hum" ambience sound var/playing_vent_ambience = FALSE - /// The next threshold time for the client to be able to play basic ambience sounds. + /// The next threshold time for the client to be able to play basic ambience sounds var/next_ambience_time = 0 + /// The last time this client was messaged from IRC. Prevents responses after 10 minutes + var/received_irc_pm = -99999 - //////////// - //SECURITY// - //////////// - // comment out the line below when debugging locally to enable the options & messages menu - //control_freak = 1 + /// Prevents people from being spammed about multikeying every time their mob changes + var/warned_about_multikeying = TRUE - var/received_irc_pm = -99999 - var/irc_admin //IRC admin that spoke with them last. - var/mute_irc = 0 - var/warned_about_multikeying = 0 // Prevents people from being spammed about multikeying every time their mob changes. - - //////////////////////////////////// - //things that require the database// - //////////////////////////////////// - var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days. - var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip - var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id - - /* - As of byond 512, due to how broken preloading is, preload_rsc MUST be set to 1 at compile time if resource URLs are *not* in use, - BUT you still want resource preloading enabled (from the server itself). If using resource URLs, it should be set to 0 and - changed to a URL at runtime (see client_procs.dm for procs that do this automatically). More information about how goofy this broken setting works at - http://www.byond.com/forum/post/1906517?page=2#comment23727144 - */ - preload_rsc = 0 + /// If the database is available, how old the account is in days + var/player_age = "Requires database" + + /// If the database is available, what other accounts previously logged in from this IP + var/related_accounts_ip = "Requires database" + + /// If the database is available, what other accounts previously logged in from this CID + var/related_accounts_cid = "Requires database" + /// The current fullscreen state for /client/toggle_fullscreen() var/fullscreen = FALSE diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 90f4cdb187fab..9291bc99f3a2d 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -64,9 +64,6 @@ if(!holder && received_irc_pm < world.time - 6000) //Worse they can do is spam IRC for 10 minutes to_chat(usr, SPAN_WARNING("You are no longer able to use this, it's been more then 10 minutes since an admin on IRC has responded to you")) return - if(mute_irc) - to_chat(usr, SPAN_WARNING("You cannot use this as your client has been muted from sending messages to the admins on IRC")) - return cmd_admin_irc_pm(href_list["irc_msg"]) return @@ -151,9 +148,10 @@ break // Change the way they should download resources. - if(config.resource_urls && length(config.resource_urls)) - src.preload_rsc = pick(config.resource_urls) - else src.preload_rsc = 1 // If config.resource_urls is not set, preload like normal. + if (length(config.resource_urls)) + preload_rsc = pick(config.resource_urls) + else + preload_rsc = TRUE if(byond_version < DM_VERSION) to_chat(src, SPAN_WARNING("You are running an older version of BYOND than the server and may experience issues.")) @@ -181,8 +179,7 @@ // [SIERRA-ADD] . = ..() //calls mob.Login() - - view = get_preference_value(/datum/client_preference/client_view) + //view = get_preference_value(/datum/client_preference/client_view) GLOB.using_map.map_info(src) diff --git a/code/modules/client/preference_setup/loadout/lists/headwear.dm b/code/modules/client/preference_setup/loadout/lists/headwear.dm index 3712c39393456..fb343034a663b 100644 --- a/code/modules/client/preference_setup/loadout/lists/headwear.dm +++ b/code/modules/client/preference_setup/loadout/lists/headwear.dm @@ -80,6 +80,7 @@ hardhats["orange hardhat"] = /obj/item/clothing/head/hardhat/orange hardhats["red hardhat"] = /obj/item/clothing/head/hardhat/red hardhats["light damage control helmet"] = /obj/item/clothing/head/hardhat/light + hardhats["yellow hardhat"] = /obj/item/clothing/head/hardhat gear_tweaks += new/datum/gear_tweak/path(hardhats) /datum/gear/head/formalhat diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm index d16b486ff5fe1..21a7b7e6c161d 100644 --- a/code/modules/clothing/_clothing.dm +++ b/code/modules/clothing/_clothing.dm @@ -54,7 +54,10 @@ for (var/obj/item/clothing/accessory/A as anything in accessories) remove_accessory(null, A) qdel(A) - accessories.Cut() + //[SIERRA-ADD] + if(accessories) //Убьёт рантаймы null.Cut() + accessories.Cut() + //[SIERRA-ADD] accessories = null . = ..() @@ -942,8 +945,8 @@ BLIND // can't see anything var/worn_state = null //Whether the clothing item has gender-specific states when worn. var/gender_icons = 0 - valid_accessory_slots = list(ACCESSORY_SLOT_UTILITY,ACCESSORY_SLOT_HOLSTER,ACCESSORY_SLOT_ARMBAND,ACCESSORY_SLOT_RANK,ACCESSORY_SLOT_DEPT,ACCESSORY_SLOT_DECOR,ACCESSORY_SLOT_MEDAL,ACCESSORY_SLOT_INSIGNIA) - restricted_accessory_slots = list(ACCESSORY_SLOT_UTILITY,ACCESSORY_SLOT_HOLSTER,ACCESSORY_SLOT_ARMBAND,ACCESSORY_SLOT_RANK,ACCESSORY_SLOT_DEPT) + valid_accessory_slots = list(ACCESSORY_SLOT_UTILITY,ACCESSORY_SLOT_HOLSTER,ACCESSORY_SLOT_ARMBAND,ACCESSORY_SLOT_RANK,ACCESSORY_SLOT_FLASH,ACCESSORY_SLOT_DECOR,ACCESSORY_SLOT_MEDAL,ACCESSORY_SLOT_INSIGNIA) + restricted_accessory_slots = list(ACCESSORY_SLOT_UTILITY,ACCESSORY_SLOT_HOLSTER,ACCESSORY_SLOT_ARMBAND,ACCESSORY_SLOT_RANK,ACCESSORY_SLOT_FLASH) /obj/item/clothing/under/New() ..() diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 49e2ccf5a56f3..5832a457b8611 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -66,8 +66,8 @@ bomb = ARMOR_BOMB_MINOR ) action_button_name = "Toggle Attachments" - valid_accessory_slots = list(ACCESSORY_SLOT_VISION, ACCESSORY_SLOT_HUD) - restricted_accessory_slots = list(ACCESSORY_SLOT_VISION, ACCESSORY_SLOT_HUD) + valid_accessory_slots = list(ACCESSORY_SLOT_GLASSES_VISION, ACCESSORY_SLOT_GLASSES_HUD) + restricted_accessory_slots = list(ACCESSORY_SLOT_GLASSES_VISION, ACCESSORY_SLOT_GLASSES_HUD) var/toggle_mods = list() /obj/item/clothing/glasses/ballistic/Initialize() diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 503055e61b636..855654eb55d42 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -6,8 +6,16 @@ slot_l_hand_str = "helmet", slot_r_hand_str = "helmet", ) - valid_accessory_slots = list(ACCESSORY_SLOT_HELM_C, ACCESSORY_SLOT_HELM_D, ACCESSORY_SLOT_VISOR) - restricted_accessory_slots = list(ACCESSORY_SLOT_HELM_C, ACCESSORY_SLOT_HELM_D, ACCESSORY_SLOT_VISOR) + valid_accessory_slots = list( + ACCESSORY_SLOT_HELMET_COVER, + ACCESSORY_SLOT_HELMET_DECOR, + ACCESSORY_SLOT_HELMET_VISOR + ) + restricted_accessory_slots = list( + ACCESSORY_SLOT_HELMET_COVER, + ACCESSORY_SLOT_HELMET_DECOR, + ACCESSORY_SLOT_HELMET_VISOR + ) item_flags = ITEM_FLAG_THICKMATERIAL body_parts_covered = HEAD armor = list( @@ -26,30 +34,28 @@ w_class = ITEM_SIZE_NORMAL species_restricted = list("exclude", SPECIES_NABBER, SPECIES_ADHERENT) + /obj/item/clothing/head/helmet/needs_vision_update() - for(var/obj/item/clothing/accessory/glassesmod/visor in accessories) + for (var/obj/item/clothing/accessory/glassesmod/visor in accessories) return TRUE - . = ..() + return ..() -/obj/item/clothing/head/helmet/verb/toggle_visor() - set name = "Toggle Helmet Attachments" +/obj/item/clothing/head/helmet/verb/toggle_visor() + set name = "Toggle Helmet Visors" set category = "Object" set src in usr - - if (!istype(loc,/mob/living)) + if (usr.incapacitated()) return - var/toggled = FALSE - if (!usr.incapacitated()) - for (var/obj/item/clothing/accessory/glassesmod/mod in accessories) - if (mod.active) - mod.deactivate(usr) - else - mod.activate(usr) - toggled = TRUE - if (!toggled) - to_chat(usr, SPAN_CLASS("danger", "You do not have a visor attached to your helmet!")) + for (var/obj/item/clothing/accessory/glassesmod/mod in accessories) + if (mod.active) + mod.deactivate(usr) + else + mod.activate(usr) + toggled = TRUE + if (!toggled) + to_chat(usr, SPAN_WARNING("Your helmet has no visors attached.")) /obj/item/clothing/head/helmet/nt @@ -95,7 +101,7 @@ name = "riot helmet" desc = "It's a helmet specifically designed to protect against close range attacks." icon_state = "helmet_riot" - valid_accessory_slots = null + valid_accessory_slots = list(ACCESSORY_SLOT_HELMET_VISOR) body_parts_covered = HEAD|FACE|EYES //face shield armor = list( melee = ARMOR_MELEE_VERY_HIGH, @@ -118,7 +124,7 @@ name = "ablative helmet" desc = "A helmet made from advanced materials which protects against concentrated energy weapons." icon_state = "helmet_reflect" - valid_accessory_slots = list(ACCESSORY_SLOT_VISOR) + valid_accessory_slots = list(ACCESSORY_SLOT_HELMET_VISOR) armor = list( melee = ARMOR_MELEE_SMALL, bullet = ARMOR_BALLISTIC_MINOR, @@ -131,7 +137,7 @@ name = "ballistic helmet" desc = "A helmet with reinforced plating to protect against ballistic projectiles." icon_state = "helmet_bulletproof" - valid_accessory_slots = list(ACCESSORY_SLOT_VISOR) + valid_accessory_slots = list(ACCESSORY_SLOT_HELMET_VISOR) armor = list( melee = ARMOR_MELEE_MINOR, bullet = ARMOR_BALLISTIC_AP, @@ -151,7 +157,7 @@ energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED ) - valid_accessory_slots = list(ACCESSORY_SLOT_VISOR) + valid_accessory_slots = list(ACCESSORY_SLOT_HELMET_VISOR) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.5 @@ -204,12 +210,10 @@ /obj/item/clothing/head/helmet/ert name = "asset protection command helmet" desc = "An in-atmosphere helmet worn by many corporate and private asset protection forces. Has blue highlights." + icon = 'icons/obj/obj_head_ERT.dmi' + item_icons = list(slot_head_str = 'icons/mob/onmob/onmob_head_ERT.dmi') icon_state = "erthelmet_cmd" valid_accessory_slots = null - item_state_slots = list( - slot_l_hand_str = "syndicate-helm-green", - slot_r_hand_str = "syndicate-helm-green", - ) armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_RIFLE, @@ -293,8 +297,8 @@ name = "model helmet" desc = "A lightweight helmet made of cheap plastic, sporting fiducial marking stickers on either side. You doubt it will provide much protection." icon_state = "nvgmount" - valid_accessory_slots = list(ACCESSORY_SLOT_VISOR, ACCESSORY_SLOT_HELM_D) - restricted_accessory_slots = list(ACCESSORY_SLOT_VISOR, ACCESSORY_SLOT_HELM_D) + valid_accessory_slots = list(ACCESSORY_SLOT_HELMET_VISOR, ACCESSORY_SLOT_HELMET_DECOR) + restricted_accessory_slots = list(ACCESSORY_SLOT_HELMET_VISOR, ACCESSORY_SLOT_HELMET_DECOR) armor = list( melee = ARMOR_MELEE_MINOR, ) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index f0aaa9d390777..67a791d07e82f 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -45,14 +45,31 @@ down_icon_state = "steriledown" pull_mask = 1 + /obj/item/clothing/mask/fakemoustache name = "fake moustache" desc = "Warning: moustache is fake." icon_state = "fake-moustache" item_state = "fake-moustache" flags_inv = HIDEFACE - body_parts_covered = 0 + body_parts_covered = EMPTY_BITFIELD visible_name = "Scoundrel" + w_class = ITEM_SIZE_SMALL + + +/obj/item/clothing/mask/fakemoustache/verb/ChangeVisibleName() + set name = "Change Visible Name" + set src in usr + if (usr.incapacitated()) + return + var/response = input(usr, null, "Change Visible Name", visible_name) as null | text + response = sanitizeName(response, MAX_NAME_LEN, TRUE, FALSE) + if (!response) + return + if (usr.incapacitated() || !(src in usr)) + return + visible_name = response + /obj/item/clothing/mask/snorkel name = "snorkel" diff --git a/code/modules/clothing/masks/smokable.dm b/code/modules/clothing/masks/smokable.dm index 6883b7c06d9e8..ef36129b38133 100644 --- a/code/modules/clothing/masks/smokable.dm +++ b/code/modules/clothing/masks/smokable.dm @@ -337,6 +337,7 @@ to_chat(H, SPAN_WARNING("\The [blocked] is in the way!")) return TRUE to_chat(H, SPAN_NOTICE("You take a drag on your [name].")) + playsound(H, "sound/effects/inhale.ogg", 50, 0, -1) smoke(5) add_trace_DNA(H) return TRUE diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index f63c9977d1182..595445b201933 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -31,8 +31,8 @@ ) light_overlay = "helmet_light" - valid_accessory_slots = list(ACCESSORY_SLOT_VISOR) - restricted_accessory_slots = list(ACCESSORY_SLOT_VISOR) + valid_accessory_slots = list(ACCESSORY_SLOT_HELMET_VISOR) + restricted_accessory_slots = list(ACCESSORY_SLOT_HELMET_VISOR) /obj/item/clothing/suit/space/void name = "voidsuit" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index bb17602cd8515..085b22054fc72 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -301,8 +301,8 @@ icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') icon_state = "pcarrier" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_C, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L, ACCESSORY_SLOT_ARMOR_S, ACCESSORY_SLOT_ARMOR_M) - restricted_accessory_slots = list(ACCESSORY_SLOT_ARMOR_C, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L, ACCESSORY_SLOT_ARMOR_S) + valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_CHEST, ACCESSORY_SLOT_ARMOR_ARMS, ACCESSORY_SLOT_ARMOR_LEGS, ACCESSORY_SLOT_ARMOR_STORAGE, ACCESSORY_SLOT_ARMOR_MISC) + restricted_accessory_slots = list(ACCESSORY_SLOT_ARMOR_CHEST, ACCESSORY_SLOT_ARMOR_ARMS, ACCESSORY_SLOT_ARMOR_LEGS, ACCESSORY_SLOT_ARMOR_STORAGE) blood_overlay_type = "armor" flags_inv = 0 @@ -365,8 +365,8 @@ icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') icon_state = "riotcarrier" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) + valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_ARMS, ACCESSORY_SLOT_ARMOR_LEGS) + restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_ARMS, ACCESSORY_SLOT_ARMOR_LEGS) body_parts_covered = UPPER_TORSO|LOWER_TORSO armor = list( melee = ARMOR_MELEE_VERY_HIGH, @@ -390,8 +390,8 @@ icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') icon_state = "ballisticcarrier" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) + valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_ARMS, ACCESSORY_SLOT_ARMOR_LEGS) + restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_ARMS, ACCESSORY_SLOT_ARMOR_LEGS) body_parts_covered = UPPER_TORSO|LOWER_TORSO armor = list( melee = ARMOR_MELEE_RESISTANT, @@ -419,8 +419,8 @@ icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') icon_state = "ablativecarrier" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) + valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_ARMS, ACCESSORY_SLOT_ARMOR_LEGS) + restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_ARMS, ACCESSORY_SLOT_ARMOR_LEGS) body_parts_covered = UPPER_TORSO|LOWER_TORSO armor = list( melee = ARMOR_MELEE_KNIVES, diff --git a/code/modules/clothing/under/accessories/_accessory.dm b/code/modules/clothing/under/accessories/_accessory.dm index 6440bbe9a8454..628320f5f7ef1 100644 --- a/code/modules/clothing/under/accessories/_accessory.dm +++ b/code/modules/clothing/under/accessories/_accessory.dm @@ -122,10 +122,10 @@ /obj/item/clothing/accessory/toggleable/var/icon_closed -/obj/item/clothing/accessory/toggleable/New() +/obj/item/clothing/accessory/toggleable/Initialize() if (!icon_closed) icon_closed = icon_state - ..() + return ..() /obj/item/clothing/accessory/toggleable/on_attached(obj/item/clothing/under/S, mob/user as mob) diff --git a/code/modules/clothing/under/accessories/arm_guards.dm b/code/modules/clothing/under/accessories/arm_guards.dm index 54ca407a57014..48c8f2bf0fc02 100644 --- a/code/modules/clothing/under/accessories/arm_guards.dm +++ b/code/modules/clothing/under/accessories/arm_guards.dm @@ -17,7 +17,7 @@ energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED ) - slot = ACCESSORY_SLOT_ARMOR_A + slot = ACCESSORY_SLOT_ARMOR_ARMS body_location = ARMS flags_inv = CLOTHING_BULKY diff --git a/code/modules/clothing/under/accessories/armor_plate.dm b/code/modules/clothing/under/accessories/armor_plate.dm index 477c8e364ed10..80717073bda11 100644 --- a/code/modules/clothing/under/accessories/armor_plate.dm +++ b/code/modules/clothing/under/accessories/armor_plate.dm @@ -11,7 +11,7 @@ energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_MINOR ) - slot = ACCESSORY_SLOT_ARMOR_C + slot = ACCESSORY_SLOT_ARMOR_CHEST flags_inv = CLOTHING_BULKY diff --git a/code/modules/clothing/under/accessories/armor_tag.dm b/code/modules/clothing/under/accessories/armor_tag.dm index 5877683ed7e73..7a30bf4265db1 100644 --- a/code/modules/clothing/under/accessories/armor_tag.dm +++ b/code/modules/clothing/under/accessories/armor_tag.dm @@ -8,7 +8,7 @@ slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi' ) icon_state = null - slot = ACCESSORY_SLOT_ARMOR_M + slot = ACCESSORY_SLOT_ARMOR_MISC w_class = ITEM_SIZE_TINY sprite_sheets = list( diff --git a/code/modules/clothing/under/accessories/goggle_mods.dm b/code/modules/clothing/under/accessories/goggle_mods.dm index e9e52bd27cbf8..ce62a81ef2c35 100644 --- a/code/modules/clothing/under/accessories/goggle_mods.dm +++ b/code/modules/clothing/under/accessories/goggle_mods.dm @@ -22,8 +22,13 @@ /obj/item/clothing/accessory/glassesmod/proc/process_hud(mob/M) return +/obj/item/clothing/accessory/glassesmod/get_mob_overlay(mob/user_mob, slot) + if (slot == "slot_s_store") + return null + return ..() + /obj/item/clothing/accessory/glassesmod/activate() - . = ..() + ..() parent.CutOverlays(inv_overlay) inv_overlay = null inv_overlay = get_inv_overlay() @@ -31,7 +36,7 @@ parent.update_vision() /obj/item/clothing/accessory/glassesmod/deactivate() - . = ..() + ..() parent.CutOverlays(inv_overlay) inv_overlay = null inv_overlay = get_inv_overlay() @@ -42,7 +47,7 @@ name = "thermal sights" desc = "An older set of thermal vision goggles, modified to attach to a helmet." icon_state = "thermals" - slot = ACCESSORY_SLOT_VISOR + slot = ACCESSORY_SLOT_HELMET_VISOR vision_flags = SEE_MOBS see_invisible = SEE_INVISIBLE_NOLIGHTING toggleable = TRUE @@ -58,7 +63,7 @@ name = "light-enhancing sights" desc = "An older set of light enhancing goggles, modified to attach to a helmet." icon_state = "nvg" - slot = ACCESSORY_SLOT_VISOR + slot = ACCESSORY_SLOT_HELMET_VISOR see_invisible = SEE_INVISIBLE_NOLIGHTING toggleable = TRUE off_state = "nvgoff" @@ -76,7 +81,7 @@ name = "security HUD attachment" desc = "An attachable security HUD for ballistic goggles." icon_state = "sechud" - slot = ACCESSORY_SLOT_HUD + slot = ACCESSORY_SLOT_GLASSES_HUD hud_type = HUD_SECURITY toggleable = TRUE off_state = "hudoff" @@ -90,7 +95,7 @@ name = "medical HUD attachment" desc = "An attachable security HUD for ballistic goggles." icon_state = "medhud" - slot = ACCESSORY_SLOT_HUD + slot = ACCESSORY_SLOT_GLASSES_HUD hud_type = HUD_MEDICAL toggleable = TRUE off_state = "hudoff" @@ -101,7 +106,7 @@ /obj/item/clothing/accessory/glassesmod/vision/polarized name = "polarized lenses" desc = "A set of flash-resistant lenses that can be clipped onto a pair of ballistic goggles." - slot = ACCESSORY_SLOT_VISION + slot = ACCESSORY_SLOT_GLASSES_VISION icon_state = "polarized" flash_protection = FLASH_PROTECTION_MODERATE darkness_view = -1 @@ -109,7 +114,7 @@ /obj/item/clothing/accessory/glassesmod/vision/welding name = "welding lenses" desc = "A set of welding lenses that can be attached to ballistic goggles to protect against arc-eye" - slot = ACCESSORY_SLOT_VISION + slot = ACCESSORY_SLOT_GLASSES_VISION icon_state = "welding_lenses" off_state = "welding_lenses_up" flash_protection = FLASH_PROTECTION_MAJOR diff --git a/code/modules/clothing/under/accessories/helmcover.dm b/code/modules/clothing/under/accessories/helmcover.dm index 58e9253d53849..cc5510586a35c 100644 --- a/code/modules/clothing/under/accessories/helmcover.dm +++ b/code/modules/clothing/under/accessories/helmcover.dm @@ -8,7 +8,7 @@ slot_head_str = 'icons/mob/onmob/onmob_modular_armor.dmi' ) icon_state = null - slot = ACCESSORY_SLOT_HELM_C + slot = ACCESSORY_SLOT_HELMET_COVER body_location = HEAD sprite_sheets = list( diff --git a/code/modules/clothing/under/accessories/helmet_decor.dm b/code/modules/clothing/under/accessories/helmet_decor.dm index f08eb0ba0405d..847ad9d87a67e 100644 --- a/code/modules/clothing/under/accessories/helmet_decor.dm +++ b/code/modules/clothing/under/accessories/helmet_decor.dm @@ -10,7 +10,7 @@ overlay_state = "error" w_class = ITEM_SIZE_TINY accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - slot = ACCESSORY_SLOT_HELM_D + slot = ACCESSORY_SLOT_HELMET_DECOR body_location = HEAD gender = PLURAL diff --git a/code/modules/clothing/under/accessories/leg_guards.dm b/code/modules/clothing/under/accessories/leg_guards.dm index 29f622d2fa42f..8982c6bd47566 100644 --- a/code/modules/clothing/under/accessories/leg_guards.dm +++ b/code/modules/clothing/under/accessories/leg_guards.dm @@ -14,7 +14,7 @@ energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED ) - slot = ACCESSORY_SLOT_ARMOR_L + slot = ACCESSORY_SLOT_ARMOR_LEGS body_location = LEGS flags_inv = CLOTHING_BULKY diff --git a/code/modules/clothing/under/accessories/pouches.dm b/code/modules/clothing/under/accessories/pouches.dm index e8e817863f87f..ef23693312e9a 100644 --- a/code/modules/clothing/under/accessories/pouches.dm +++ b/code/modules/clothing/under/accessories/pouches.dm @@ -9,7 +9,7 @@ ) icon_state = "pouches" gender = PLURAL - slot = ACCESSORY_SLOT_ARMOR_S + slot = ACCESSORY_SLOT_ARMOR_STORAGE slots = 2 STORAGE_SLOTS sprite_sheets = list( diff --git a/code/modules/crafting/crafting_weapons_ranged.dm b/code/modules/crafting/crafting_weapons_ranged.dm index 2fe5e68c287c7..a51c09ab4c3d7 100644 --- a/code/modules/crafting/crafting_weapons_ranged.dm +++ b/code/modules/crafting/crafting_weapons_ranged.dm @@ -81,7 +81,7 @@ /singleton/crafting_stage/screwdriver/zipgun progress_message = "You secure the trigger assembly and finish off the zipgun." - product = /obj/item/gun/projectile/pirate/unloaded //zipgun.dm + product = /obj/item/gun/projectile/pirate //zipgun.dm // Crossbow diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm index ae881eddbc06f..85839d39d18c6 100644 --- a/code/modules/emotes/definitions/_mob.dm +++ b/code/modules/emotes/definitions/_mob.dm @@ -1,5 +1,7 @@ /mob/var/list/default_emotes = list() /mob/var/list/usable_emotes = list() +/mob/var/next_audible_emote_time = 0 +/mob/var/audible_emote_cooldown = 0.5 SECONDS /mob/proc/update_emotes(skip_sort) usable_emotes.Cut() diff --git a/code/modules/emotes/definitions/audible.dm b/code/modules/emotes/definitions/audible.dm index c34c84393ef39..282dfa358eb3c 100644 --- a/code/modules/emotes/definitions/audible.dm +++ b/code/modules/emotes/definitions/audible.dm @@ -5,11 +5,18 @@ var/list/emote_sound /singleton/emote/audible/do_extra(atom/user) - if(emote_sound) - var/playable = emote_sound - if (islist(emote_sound)) - playable = pick(emote_sound) - playsound(user.loc, playable, 50, 0) + if(!emote_sound) + return + if (ismob(user)) + var/mob/M = user + if (world.time < M.next_audible_emote_time) + M.next_audible_emote_time = world.time + M.audible_emote_cooldown + return + M.next_audible_emote_time = world.time + M.audible_emote_cooldown + var/playable = emote_sound + if (islist(emote_sound)) + playable = pick(emote_sound) + playsound(user.loc, playable, 50, 0) /singleton/emote/audible/deathgasp_alien key = "deathgasp" diff --git a/code/modules/fabrication/designs/general/designs_general.dm b/code/modules/fabrication/designs/general/designs_general.dm index 63cbdbeddc0e7..4f5b6b487897b 100644 --- a/code/modules/fabrication/designs/general/designs_general.dm +++ b/code/modules/fabrication/designs/general/designs_general.dm @@ -116,3 +116,6 @@ /datum/fabricator_recipe/binoculars path = /obj/item/device/binoculars + +/datum/fabricator_recipe/tape_roll + path = /obj/item/tape_roll diff --git a/code/modules/fabrication/designs/general/designs_medical.dm b/code/modules/fabrication/designs/general/designs_medical.dm index 1a25638d722ff..897c21b359521 100644 --- a/code/modules/fabrication/designs/general/designs_medical.dm +++ b/code/modules/fabrication/designs/general/designs_medical.dm @@ -1,5 +1,4 @@ /datum/fabricator_recipe/medical - path = /obj/item/scalpel/basic category = "Medical" /datum/fabricator_recipe/medical/circularsaw @@ -43,3 +42,6 @@ /datum/fabricator_recipe/medical/hypospray/autoinjector path = /obj/item/reagent_containers/hypospray/autoinjector + +/datum/fabricator_recipe/medical/scalpel + path = /obj/item/scalpel/basic diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm index 1eeebdcaf083d..bf4cc4b0fb46f 100644 --- a/code/modules/item_worth/worths_list.dm +++ b/code/modules/item_worth/worths_list.dm @@ -472,12 +472,12 @@ var/global/list/worths = list( /obj/item/device/dociler = 490, /obj/item/device/bot_controller = 50, /obj/item/device/mmi = 1200, - // [SIERRA-REMOVE] - MECHS_BY_SHEGAR, + // [SIERRA-REMOVE] - Mechs_by_shegar, /*, /obj/item/device/kit/paint = 500, */ // [/SIERRA-REMOVE], - // [SIERRA-ADD] - MECHS_BY_SHEGAR, + // [SIERRA-ADD] - Mechs_by_shegar, /obj/item/device/kit/mech = 500, // [/SIERRA-ADD], /obj/item/device/kit = 100, diff --git a/code/modules/mechs/components/_components.dm b/code/modules/mechs/components/_components.dm index 133b80cd42a4a..4e3e1d3f36e36 100644 --- a/code/modules/mechs/components/_components.dm +++ b/code/modules/mechs/components/_components.dm @@ -54,6 +54,7 @@ /obj/item/mech_component/proc/update_health() total_damage = brute_damage + burn_damage if(total_damage > max_damage) total_damage = max_damage + current_hp = max_damage - total_damage var/prev_state = damage_state damage_state = clamp(round((total_damage/max_damage) * 4), MECH_COMPONENT_DAMAGE_UNDAMAGED, MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL) if(damage_state > prev_state) @@ -191,5 +192,5 @@ to_chat(user, SPAN_NOTICE("[capitalize(src.name)]:")) // [SIERRA-EDIT] - Mechs_by_shegar //to_chat(user, SPAN_NOTICE(" - Integrity: [round((((max_damage - total_damage) / max_damage)) * 100)]%" )) - to_chat(user, SPAN_NOTICE(" - Integrity: [max_damage - total_damage]/[max_damage]([round((((max_damage - total_damage) / max_damage)) * 100)]%)" )) + to_chat(user, SPAN_NOTICE(" - Integrity: [current_hp]/[max_damage]([round(((current_hp / max_damage)) * 100)]%) Unrepairable damage: [unrepairable_damage]" )) // [SIERRA-EDIT] diff --git a/code/modules/mechs/components/head.dm b/code/modules/mechs/components/head.dm index 734e8f15deace..610a6602a54f4 100644 --- a/code/modules/mechs/components/head.dm +++ b/code/modules/mechs/components/head.dm @@ -12,6 +12,8 @@ var/active_sensors = 0 power_use = 15 w_class = ITEM_SIZE_NORMAL + var/obj/mob/exosuit/owner + /obj/item/mech_component/sensors/Destroy() QDEL_NULL(camera) @@ -37,20 +39,24 @@ software = locate() in src //EDIT -// [SIERRA-EDIT] - SHUTTLE_TOGGLE - (Optional Reason/comment) +// [SIERRA-EDIT] - Mechs-by-Shebar /* /obj/item/mech_component/sensors/proc/get_sight(powered) var/flags = 0 if(total_damage >= 0.8 * max_damage || !powered) flags |= BLIND else if(active_sensors && powered) flags |= vision_flags + return flags */ /obj/item/mech_component/sensors/proc/get_sight(powered) var/flags = 0 - if(!camera || !powered) - flags |= BLIND - else if(active_sensors && powered) - flags |= vision_flags + if(!powered ||(!camera && powered)) //Камера не работает/Ничего не запитано? + flags |= BLIND //включается слепота + if(powered && camera) + if(active_sensors) //SENSORS active? (Button) + flags |= vision_flags //Мех получает спец зрение от сенсоров + + return flags // [SIERRA-EDIT] diff --git a/code/modules/mechs/equipment/combat.dm b/code/modules/mechs/equipment/combat.dm index eb288b97570a1..52f18b02cbc48 100644 --- a/code/modules/mechs/equipment/combat.dm +++ b/code/modules/mechs/equipment/combat.dm @@ -69,6 +69,9 @@ /obj/item/mech_equipment/shields/uninstalled() QDEL_NULL(aura) + //[SIERRA-ADD] - Mechs-by-Shegar + toggle() //Предотвратит обработку оного когда он не в мехе + //[SIERRA-ADD] - Mechs-by-Shegar . = ..() /obj/item/mech_equipment/shields/attack_self(mob/user) diff --git a/code/modules/mechs/equipment/utility.dm b/code/modules/mechs/equipment/utility.dm index b870a9c069144..c46cbf729a007 100644 --- a/code/modules/mechs/equipment/utility.dm +++ b/code/modules/mechs/equipment/utility.dm @@ -697,6 +697,7 @@ /obj/item/gun/energy/plasmacutter/mounted/mech use_external_power = TRUE has_safety = FALSE + max_shots = 10 /obj/item/mech_equipment/mounted_system/taser/plasma diff --git a/code/modules/mechs/interface/_interface.dm b/code/modules/mechs/interface/_interface.dm index bb65fb85abc65..5c0ffb7415390 100644 --- a/code/modules/mechs/interface/_interface.dm +++ b/code/modules/mechs/interface/_interface.dm @@ -54,6 +54,7 @@ /obj/screen/movable/exosuit/toggle/megaspeakers, /obj/screen/movable/exosuit/toggle/gps, /obj/screen/movable/exosuit/toggle/medscan, + /obj/screen/movable/exosuit/id, ) //[SIERRA-EDIT] i = 0 diff --git a/code/modules/mechs/interface/screen_objects.dm b/code/modules/mechs/interface/screen_objects.dm index c4b6a8ffd23c8..49c07c3faab6f 100644 --- a/code/modules/mechs/interface/screen_objects.dm +++ b/code/modules/mechs/interface/screen_objects.dm @@ -215,6 +215,9 @@ /obj/screen/movable/exosuit/toggle/power_control/toggled() . = ..() owner.toggle_power(usr) + //[SIERRA-ADD] - Mechs-by-Shegar + owner.update_icon() + //[SIERRA-ADD] /obj/screen/movable/exosuit/toggle/power_control/on_update_icon() toggled = (owner.power == MECH_POWER_ON) @@ -285,11 +288,11 @@ /obj/screen/movable/exosuit/toggle/hatch_open/toggled() if (!owner) return - if(!owner.hatch_closed && owner.power != MECH_POWER_ON) + if(owner.hatch_locked) to_chat(usr, SPAN_WARNING("You cannot open the hatch while it is locked.")) return //[SIERRA-ADD] - Mechs-by-Shegar - if(owner.hatch_closed && owner.power != MECH_POWER_ON) + if(!owner.hatch_closed && owner.power != MECH_POWER_ON) to_chat(usr, SPAN_WARNING("Cockpit hydraulic system offline,hatch can't be closed now.")) return //[SIERRA-ADD] diff --git a/code/modules/mechs/mech.dm b/code/modules/mechs/mech.dm index 2f48b31e745cf..fb9e8a1f8b482 100644 --- a/code/modules/mechs/mech.dm +++ b/code/modules/mechs/mech.dm @@ -216,6 +216,17 @@ . = ..() if(.) update_pilots() + //[SIERRA-ADD] - Mechs-by-Shegar - Обновит спрайт пассажиров при развороте меха + if(passengers_ammount > 0) + update_passengers() + var/need_to_update = FALSE + //exosuit.passenger_compartment.count_passengers() + for(var/hardpoint in hardpoints) + if(hardpoint == "left hand" || hardpoint == "right hand" || hardpoint == "left shoulder" || hardpoint == "right shoulder") + need_to_update = TRUE + if(need_to_update == TRUE) + update_icon() + //[SIERRA-ADD] /mob/living/exosuit/proc/toggle_power(mob/user) if(power == MECH_POWER_TRANSITION) diff --git a/code/modules/mechs/mech_icon.dm b/code/modules/mechs/mech_icon.dm index 2b3721ac5c467..dfbdb0c31632e 100644 --- a/code/modules/mechs/mech_icon.dm +++ b/code/modules/mechs/mech_icon.dm @@ -56,17 +56,18 @@ var/obj/item/mech_equipment/hardpoint_object = hardpoints[hardpoint] if(hardpoint_object) //[SIERRA-ADD] - Mechs-by-Shegar + //Данный участок кода в зависимости от положения помещает модуль за мех или перед мехом, это выглядит красиво. if(hardpoint in list(HARDPOINT_LEFT_HAND, HARDPOINT_LEFT_SHOULDER)) - if(dir == WEST || dir == SOUTHWEST || dir == NORTHWEST) + if(dir == WEST || dir == SOUTHWEST || dir == NORTHWEST || dir == SOUTH || dir == NORTH) hardpoint_object.mech_layer = MECH_GEAR_LAYER else if(dir == EAST || dir == SOUTHEAST || dir == NORTHEAST) hardpoint_object.mech_layer = MECH_BACK_LAYER - else if(hardpoint in list(HARDPOINT_RIGHT_HAND,HARDPOINT_RIGHT_SHOULDER)) + else if(hardpoint in list(HARDPOINT_RIGHT_HAND, HARDPOINT_RIGHT_SHOULDER)) if(dir == WEST || dir == SOUTHWEST || dir == NORTHWEST) hardpoint_object.mech_layer = MECH_BACK_LAYER else if(dir == EAST || dir == SOUTHEAST || dir == NORTHEAST || dir == SOUTH) hardpoint_object.mech_layer = MECH_GEAR_LAYER - else if(hardpoint in list(HARDPOINT_BACK)) + else if(hardpoint in list(HARDPOINT_BACK, HARDPOINT_HEAD)) if(dir == SOUTH) hardpoint_object.mech_layer = MECH_BACK_LAYER else @@ -102,35 +103,47 @@ SetOverlays(new_overlays) /mob/living/exosuit/proc/update_pilots(update_overlays = TRUE) + //[SIERRA-ADD] - Mechs-by-Shegar + //Сперва мы проверяем - а нам вообще надо обновлять пилота? Если кабина закрытого типа, то, ну, зачем? + if(!body || (body.hide_pilot)) + return + var/local_dir = dir + if(local_dir == NORTHEAST || local_dir == SOUTHEAST) + local_dir = EAST + else if(local_dir == NORTHWEST || local_dir == SOUTHWEST) + local_dir = WEST + //[SIERRA-ADD] if(update_overlays && LAZYLEN(pilot_overlays)) CutOverlays(pilot_overlays) pilot_overlays = null - if(body && !(body.hide_pilot)) - for(var/i = 1 to LAZYLEN(pilots)) - var/mob/pilot = pilots[i] - var/image/draw_pilot = new - draw_pilot.appearance = pilot - var/rel_pos = dir == NORTH ? -1 : 1 - draw_pilot.layer = MECH_PILOT_LAYER + (body ? ((LAZYLEN(body.pilot_positions)-i)*0.001 * rel_pos) : 0) - draw_pilot.plane = FLOAT_PLANE - draw_pilot.appearance_flags = KEEP_TOGETHER - if(body && i <= LAZYLEN(body.pilot_positions)) - var/list/offset_values = body.pilot_positions[i] - var/list/directional_offset_values = offset_values["[dir]"] - draw_pilot.pixel_x = pilot.default_pixel_x + directional_offset_values["x"] - draw_pilot.pixel_y = pilot.default_pixel_y + directional_offset_values["y"] - draw_pilot.pixel_z = 0 - draw_pilot.ClearTransform() + for(var/i = 1 to LAZYLEN(pilots)) + var/mob/pilot = pilots[i] + var/image/draw_pilot = new + draw_pilot.appearance = pilot + var/rel_pos = local_dir == NORTH ? -1 : 1 + draw_pilot.layer = MECH_PILOT_LAYER + (body ? ((LAZYLEN(body.pilot_positions)-i)*0.001 * rel_pos) : 0) + draw_pilot.plane = FLOAT_PLANE + draw_pilot.appearance_flags = KEEP_TOGETHER + if(body && i <= LAZYLEN(body.pilot_positions)) + var/list/offset_values = body.pilot_positions[i] + var/list/directional_offset_values = offset_values["[local_dir]"] + draw_pilot.pixel_x = pilot.default_pixel_x + directional_offset_values["x"] + draw_pilot.pixel_y = pilot.default_pixel_y + directional_offset_values["y"] + draw_pilot.pixel_z = 0 + draw_pilot.ClearTransform() - //Mask pilots! - //Masks are 48x48 and pilots 32x32 (in theory at least) so some math is required for centering - var/diff_x = 8 - draw_pilot.pixel_x - var/diff_y = 8 - draw_pilot.pixel_y - draw_pilot.filters = filter(type = "alpha", icon = icon(body.on_mech_icon, "[body.icon_state]_pilot_mask[hatch_closed ? "" : "_open"]", dir), x = diff_x, y = diff_y) + //Mask pilots! + //Masks are 48x48 and pilots 32x32 (in theory at least) so some math is required for centering + var/diff_x = 8 - draw_pilot.pixel_x + var/diff_y = 8 - draw_pilot.pixel_y + //[SIERRA-EDIT] + //draw_pilot.filters = filter(type = "alpha", icon = icon(body.on_mech_icon, "[body.icon_state]_pilot_mask[hatch_closed ? "" : "_open"]", dir), x = diff_x, y = diff_y) + //SIERRA-EDIT + draw_pilot.filters = filter(type = "alpha", icon = icon(body.on_mech_icon, "[body.icon_state]_pilot_mask[hatch_closed ? "" : "_open"]", local_dir), x = diff_x, y = diff_y) - LAZYADD(pilot_overlays, draw_pilot) - if(update_overlays && LAZYLEN(pilot_overlays)) - AddOverlays(pilot_overlays) + LAZYADD(pilot_overlays, draw_pilot) + if(update_overlays && LAZYLEN(pilot_overlays)) + AddOverlays(pilot_overlays) /mob/living/exosuit/regenerate_icons() return diff --git a/code/modules/mechs/mech_interaction.dm b/code/modules/mechs/mech_interaction.dm index a145767d318ad..9502f1bff268b 100644 --- a/code/modules/mechs/mech_interaction.dm +++ b/code/modules/mechs/mech_interaction.dm @@ -221,6 +221,14 @@ var/arms_local_damage = arms.melee_damage src.visible_message(SPAN_DANGER("\The [src] steps back, preparing for a strike!"), blind_message = SPAN_DANGER("You hear the loud hissing of hydraulics!")) if (do_after(src, 1.2 SECONDS, get_turf(src), DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && user) + + //[SIERRA-ADD] - Mechs_by_Shegar + //CHECK + if (get_dist(src, A) > 1.5) + src.visible_message(SPAN_DANGER(" [src] misses with his attack!")) + setClickCooldown(arms ? arms.action_delay : 7) + playsound(src.loc, arms.punch_sound, 50, 1) + return //additional actions with objects! //emergency airlock open @@ -430,7 +438,7 @@ return TRUE // Crowbar - Force open locked cockpit - if (isCrowbar(tool)) + else if (isCrowbar(tool)) if (!body) USE_FEEDBACK_FAILURE("\The [src] has no cockpit to force.") //[SIERRA-EDIT] - Mechs-by-Shegar @@ -449,9 +457,8 @@ if(hatch_locked) USE_FEEDBACK_FAILURE("\The [src]'s cockpit locked by cockpit security bolts. You need saw or welder.") return FALSE - var/delay = min(50 * user.skill_delay_mult(SKILL_DEVICES), 50 * user.skill_delay_mult(SKILL_EVA)) visible_message(SPAN_NOTICE("\The [user] starts forcing the \the [src]'s emergency [body.hatch_descriptor] release using \the [tool].")) - if(!do_after(user, delay, src, DO_DEFAULT | DO_PUBLIC_PROGRESS)) + if(!do_after(user, 5 SECONDS, src, DO_DEFAULT | DO_PUBLIC_PROGRESS)) return playsound(src, 'sound/machines/bolts_up.ogg', 25, TRUE) hatch_closed = !hatch_closed @@ -478,7 +485,7 @@ return TRUE // [SIERRA-EDIT] // Mech Equipment - Install equipment - if (istype(tool, /obj/item/mech_equipment)) + else if (istype(tool, /obj/item/mech_equipment)) if (hardpoints_locked) USE_FEEDBACK_FAILURE("\The [src]'s hardpoint system is locked.") return TRUE @@ -503,7 +510,20 @@ return TRUE // Multitool - Remove component - if (isMultitool(tool)) + //[SIERRA-ADD] - Mechs-by-Shegar + //Персонаж пытающийся взаимодействовать мультитулом может открыть доп взаимодействие? + else if (istype(tool, /obj/item/device/multitool/multimeter)) + can_hack_id(tool, user) + else if (isMultitool(tool)) + if(id_holder) + var/list/variants = list("Restore ID data", "Dismantle equipment") + var/bla + var/choose = input(usr, "What you want to do?.", name, bla) as null|anything in variants + if(!choose) + return + if(choose == "Restore ID data") + can_hack_id(tool,user) + //[SIERRA-ADD] - Mechs-by-Shegar if (hardpoints_locked) USE_FEEDBACK_FAILURE("\The [src]'s hardpoint system is locked.") return TRUE @@ -521,7 +541,7 @@ return TRUE // Power Cell - Install cell - if (istype(tool, /obj/item/cell)) + else if (istype(tool, /obj/item/cell)) if (!maintenance_protocols) USE_FEEDBACK_FAILURE("\The [src]'s maintenance protocols must be enabled to install \the [tool].") return TRUE @@ -540,7 +560,7 @@ return TRUE // Screwdriver - Remove cell - if (isScrewdriver(tool)) + else if (isScrewdriver(tool)) if (!maintenance_protocols) USE_FEEDBACK_FAILURE("\The [src]'s maintenance protocols must be enabled to access the power cell.") return TRUE @@ -570,7 +590,7 @@ return TRUE // Welding Tool - Repair physical damage - if (isWelder(tool)) + else if (isWelder(tool)) if (!getBruteLoss()) USE_FEEDBACK_FAILURE("\The [src] has no physical damage to repair.") return TRUE @@ -584,11 +604,14 @@ if (!input_fix.brute_damage) USE_FEEDBACK_FAILURE("\The [src]'s [input_fix.name] no longer needs repair.") return TRUE + if(input_fix.max_damage - input_fix.current_hp > input_fix.max_repair) + USE_FEEDBACK_FAILURE("\The [src]'s [input_fix.name] is too damaged and requires repair with material.") + return TRUE input_fix.repair_brute_generic(tool, user) return TRUE // Wrench - Toggle securing bolts - if (isWrench(tool)) + else if (isWrench(tool)) if (!maintenance_protocols) USE_FEEDBACK_FAILURE("\The [src]'s maintenance protocols must be enabled to access the securing bolts.") return TRUE diff --git a/code/modules/mechs/mech_life.dm b/code/modules/mechs/mech_life.dm index 0a4f2a478418d..48631c8a57021 100644 --- a/code/modules/mechs/mech_life.dm +++ b/code/modules/mechs/mech_life.dm @@ -11,13 +11,16 @@ pilot.client.screen -= menu_hud_elements LAZYREMOVE(pilots, pilot) UNSETEMPTY(pilots) - update_pilots() + //[SIERRA-REMOVE] - Mechs-by-Shegar + //update_pilots() - Спамить проком обновления пилота БЕЗ ОСОБОЙ ПРИЧИНЫ - ОШИБКА + //[SIERRA-REMOVE] //[SIERRA-EDIT] - Mechs-by-Shegar //Я сдвинул вот этот кусок выше, дабы если ВДРУГ функция будет умирать по пути, то мех не становился бессмертным //[SIERRA-EDIT] updatehealth() if(health <= 0 && stat != DEAD) death() + return if(radio) radio.on = (head && head.radio && head.radio.is_functional() && get_cell()) diff --git a/code/modules/mechs/mech_movement.dm b/code/modules/mechs/mech_movement.dm index d8ed153e0086c..dbca01e78691e 100644 --- a/code/modules/mechs/mech_movement.dm +++ b/code/modules/mechs/mech_movement.dm @@ -125,12 +125,7 @@ playsound(exosuit.loc, exosuit.legs.mech_turn_sound, 40,1) exosuit.set_dir(moving_dir) exosuit.SetMoveCooldown(exosuit.legs.turn_delay) - exosuit.passenger_compartment.count_passengers() - if(exosuit.passengers_ammount > 0) - exosuit.update_passengers() - for(var/hardpoint in exosuit.hardpoints) - if(hardpoint == "left hand" || hardpoint == "right hand" || hardpoint == "left shoulder" || hardpoint == "right shoulder") - exosuit.update_icon() + //TURN //MOVE @@ -138,7 +133,21 @@ exosuit.SetMoveCooldown(exosuit.legs ? exosuit.legs.move_delay : 3) var/turf/target_loc = get_step(exosuit, direction) if(target_loc && exosuit.legs && exosuit.legs.can_move_on(exosuit.loc, target_loc) && exosuit.MayEnterTurf(target_loc)) - exosuit.Move(target_loc) + if(!exosuit.body.phazon) + exosuit.Move(target_loc) + else + for(var/thing in exosuit.pilots) //Для всех пилотов внутри + var/mob/pilot = thing + if(pilot && pilot.client) + for(var/key in pilot.client.keys_held) + if (key == "Shift") + var/move_speed = exosuit.legs.move_delay + move_speed = move_speed * 2.5 + exosuit.SetMoveCooldown(exosuit.legs ? move_speed : 3) + exosuit.forceMove(target_loc) + + else + exosuit.Move(target_loc) return MOVEMENT_HANDLED /datum/movement_handler/mob/space/exosuit expected_host_type = /mob/living/exosuit diff --git a/code/modules/mechs/premade/powerloader.dm b/code/modules/mechs/premade/powerloader.dm index 23169395d70c5..41e656fe6d03f 100644 --- a/code/modules/mechs/premade/powerloader.dm +++ b/code/modules/mechs/premade/powerloader.dm @@ -98,11 +98,20 @@ MC.color = rgb(255,rand(188, 225),rand(55, 136)) //Damage it var/obj/item/mech_component/damaged = pick(parts) + //[SIERRA-EDIT] - Mechs-by-Shegar + /* + damaged.take_brute_damage((damaged.max_damage/ 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) + if(prob(33)) + parts -= damaged + damaged = pick(parts) + damaged.take_brute_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) + */ damaged.take_brute_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) if(prob(33)) parts -= damaged damaged = pick(parts) damaged.take_brute_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) + //[SIERRA-EDIT] - Mechs-by-Shegar /mob/living/exosuit/premade/powerloader/old/spawn_mech_equipment() install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_HEAD) diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 54e57c76b9f0b..ca71bea78a622 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -116,8 +116,7 @@ if(machine.check_eye(src) < 0) reset_view(null) else - if(client && !client.adminobs) - reset_view(null) + reset_view(null) return 1 diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index e747a13db071f..418138aeb20c9 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -189,7 +189,6 @@ if (!( machine.check_eye(src) )) reset_view(null) else - if(client && !client.adminobs) - reset_view(null) + reset_view(null) return 1 diff --git a/code/modules/mob/living/carbon/human/corpse.dm b/code/modules/mob/living/carbon/human/corpse.dm index 83e9264945da2..fe66afe72ed6b 100644 --- a/code/modules/mob/living/carbon/human/corpse.dm +++ b/code/modules/mob/living/carbon/human/corpse.dm @@ -201,3 +201,7 @@ /obj/landmark/corpse/syndicate/commando name = "Syndicate Commando" corpse_outfits = list(/singleton/hierarchy/outfit/mercenary/syndicate/commando) + +/obj/landmark/corpse/anomalist + name = "Dead Anomalist" + corpse_outfits = list(/singleton/hierarchy/outfit/anomalist) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 80d81955ea679..6b0e5ca5b0be9 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -97,7 +97,11 @@ /mob/living/carbon/human/proc/process_visor(obj/item/clothing/head/hat, obj/item/clothing/glasses/eyewear) remove_client_color(/datum/client_color/monochrome) remove_client_color(/datum/client_color/nvg) - if (hat) + //SIERRA-EDIT (Убивает рантайм, когда с НЕ шлемов пытаются стянуть очки) + //if(hat) + + if (hat && istype(hat, /obj/item/clothing/head )) + //SIERRA-EDIT for(var/obj/item/clothing/accessory/glassesmod/mod in hat.accessories) if (mod?.active) equipment_darkness_modifier += mod.darkness_view diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 9fa40a5421ff3..1c4da4029e33b 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1146,7 +1146,7 @@ else if((mRemote in mutations) && remoteview_target) if(remoteview_target.stat == CONSCIOUS) isRemoteObserve = 1 - if(!isRemoteObserve && client && !client.adminobs) + if(!isRemoteObserve && client) remoteview_target = null reset_view(null, 0) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 2c6263ef7ec19..95787852e45e7 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -188,7 +188,7 @@ else if(eyeobj) if(eyeobj.owner != src) reset_view(null) - else if(!client?.adminobs) + else reset_view(null) /mob/living/proc/update_sight() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 58c163b6552bc..6c76dec5dc012 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -236,8 +236,7 @@ if (machine.check_eye(src) < 0) reset_view(null) else - if(client && !client.adminobs) - reset_view(null) + reset_view(null) return 1 diff --git a/code/modules/organs/external/diagnostics.dm b/code/modules/organs/external/diagnostics.dm index 522a143a9b682..e67c1f1ad8cbc 100644 --- a/code/modules/organs/external/diagnostics.dm +++ b/code/modules/organs/external/diagnostics.dm @@ -171,6 +171,8 @@ if(!length(sounds)) if(owner.pulse()) sounds += "faint pulse" + if(status & ORGAN_ARTERY_CUT) + sounds += "rushing liquid" return sounds /singleton/diagnostic_sign diff --git a/code/modules/overmap/disperser/disperser_charge.dm b/code/modules/overmap/disperser/disperser_charge.dm index 1a6ff5631c1e3..9376ad594abce 100644 --- a/code/modules/overmap/disperser/disperser_charge.dm +++ b/code/modules/overmap/disperser/disperser_charge.dm @@ -1,7 +1,7 @@ /obj/structure/ship_munition/disperser_charge name = "unknown disperser charge" desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge does not have a defined purpose." - icon_state = "slug" + icon_state = "ammunition1" atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE var/chargetype var/chargedesc @@ -11,7 +11,7 @@ /obj/structure/ship_munition/disperser_charge/fire name = "\improper FR1-ENFER charge" - color = "#b95a00" + icon_state = "ammunition4" desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge is designed to release a localised fire on impact." chargetype = OVERMAP_WEAKNESS_FIRE chargedesc = "ENFER" @@ -29,7 +29,7 @@ /obj/structure/ship_munition/disperser_charge/emp name = "\improper EM2-QUASAR charge" - color = "#6a97b0" + icon_state = "ammunition3" desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge is designed to release a blast of electromagnetic pulse on impact." chargetype = OVERMAP_WEAKNESS_EMP chargedesc = "QUASAR" @@ -39,7 +39,7 @@ /obj/structure/ship_munition/disperser_charge/mining name = "\improper MN3-BERGBAU charge" - color = "#cfcf55" + icon_state = "ammunition2" desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge is designed to mine ores on impact." chargetype = OVERMAP_WEAKNESS_MINING chargedesc = "BERGBAU" @@ -55,7 +55,7 @@ /obj/structure/ship_munition/disperser_charge/explosive name = "\improper XP4-INDARRA charge" - color = "#aa5f61" + icon_state = "ammunition5" desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge is designed to explode on impact." chargetype = OVERMAP_WEAKNESS_EXPLOSIVE chargedesc = "INDARRA" diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm index 4f9d9c1ae2398..7a7558a9f6e79 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm @@ -27,9 +27,12 @@ /obj/machinery/fusion_fuel_injector/on_update_icon() ClearOverlays() - if(panel_open) + if (panel_open) AddOverlays("[icon_state]_panel") - if(injecting && cur_assembly) + if (injecting && cur_assembly) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_emitting")) + AddOverlays("[icon_state]_lights_emitting") + else AddOverlays(emissive_appearance(icon, "[icon_state]_lights")) AddOverlays("[icon_state]_lights") @@ -131,11 +134,8 @@ amount_left += cur_assembly.rod_quantities[reagent] if(cur_assembly) cur_assembly.percent_depleted = amount_left / cur_assembly.initial_amount - AddOverlays(emissive_appearance(icon, "[icon_state]_lights_emitting")) - AddOverlays("[icon_state]_lights_emitting") else StopInjecting() - update_icon() /obj/machinery/fusion_fuel_injector/verb/rotate_clock() set category = "Object" diff --git a/code/modules/research/designs/designs_bluespace.dm b/code/modules/research/designs/designs_bluespace.dm index e3cf4a2526cdd..5d21c5d925b77 100644 --- a/code/modules/research/designs/designs_bluespace.dm +++ b/code/modules/research/designs/designs_bluespace.dm @@ -37,4 +37,12 @@ materials = list(MATERIAL_GOLD = 3000, MATERIAL_DIAMOND = 1500, MATERIAL_URANIUM = 250, MATERIAL_PLASTIC = 250) build_path = /obj/item/storage/backpack/holding sort_string = "VAFAA" - +// SIERRA ADD +/datum/design/item/telesci/gps + name = "Telescience GPS" + desc = "Required for calculations in the telescience field." + req_tech = list(TECH_ENGINEERING = 3, TECH_BLUESPACE = 4) + materials = list(MATERIAL_STEEL = 300, MATERIAL_PLASTIC = 250) + build_path = /obj/item/device/telesci/gps + sort_string = "VACAA" +// SIERRA ADD-END diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 4c234f4a44876..e04eab79e3482 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -103,7 +103,7 @@ if((. = ..())) return if(O.is_open_container()) - return TRUE + return FALSE if(panel_open) to_chat(user, SPAN_NOTICE("You can't load \the [src] while it's opened.")) return TRUE diff --git a/code/modules/species/station/station.dm b/code/modules/species/station/station.dm index 983238c860bd1..b3838f3ab2db0 100644 --- a/code/modules/species/station/station.dm +++ b/code/modules/species/station/station.dm @@ -105,7 +105,7 @@ pronouns = list(PRONOUNS_THEY_THEM) hidden_from_codex = FALSE min_age = 19 - max_age = 90 + max_age = 130 burn_mod = 0.9 oxy_mod = 1.3 diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index c0bd8a1f1757e..cbd399d345d6b 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -106,7 +106,7 @@ var/aw_EPR = FALSE var/list/threshholds = list( // List of lists defining the amber/red labeling threshholds in readouts. Numbers are minminum red and amber and maximum amber and red, in that order - list("name" = SUPERMATTER_DATA_EER, "min_h" = -1, "min_l" = -1, "max_l" = 150, "max_h" = 300), + list("name" = SUPERMATTER_DATA_EER, "min_h" = -1, "min_l" = -1, "max_l" = 1100, "max_h" = 1300), list("name" = SUPERMATTER_DATA_TEMPERATURE, "min_h" = -1, "min_l" = -1, "max_l" = 4000, "max_h" = 5000), list("name" = SUPERMATTER_DATA_PRESSURE, "min_h" = -1, "min_l" = -1, "max_l" = 5000, "max_h" = 10000), list("name" = SUPERMATTER_DATA_EPR, "min_h" = -1, "min_l" = 1.0, "max_l" = 2.5, "max_h" = 4.0) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index ea1a1a38ae00b..192b6e173aea7 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -169,46 +169,47 @@ playsound(target.loc, 'sound/items/hemostat.ogg', 50, TRUE) ..() + /singleton/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - var/exposed = 0 + var/exposed if(affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED)) - exposed = 1 + exposed = TRUE if(BP_IS_ROBOTIC(affected) && affected.hatch_state == HATCH_OPENED) - exposed = 1 - + exposed = TRUE var/list/loot = list() - if(exposed) + if (exposed) loot = affected.implants else - for(var/datum/wound/wound in affected.wounds) - if(LAZYLEN(wound.embedded_objects)) + for (var/datum/wound/wound in affected.wounds) + if (length(wound.embedded_objects)) loot |= wound.embedded_objects - - if (length(loot)) - - var/obj/item/obj = pick(loot) - - user.visible_message(SPAN_NOTICE("[user] takes something out of incision on [target]'s [affected.name] with \the [tool]."), \ - SPAN_NOTICE("You take \the [obj] out of incision on \the [target]'s [affected.name] with \the [tool].") ) + if (!length(loot)) + user.visible_message( + SPAN_NOTICE("\The [user] could not find anything inside \the [target]'s [affected.name], and pulls their [tool] out."), + SPAN_NOTICE("You could not find anything inside \the [target]'s [affected.name].") + ) + return + shuffle(loot, TRUE) + for (var/i = length(loot) to 1 step -1) + var/obj/item/obj = loot[i] + user.visible_message( + SPAN_NOTICE("\The [user] takes something out of incision on \the [target]'s [affected.name] with \a [tool]."), + SPAN_NOTICE("You take \a [obj] out of the incision on \the [target]'s [affected.name] with \the [tool].") + ) target.remove_implant(obj, TRUE, affected) - SET_BIT(target.hud_updateflag, IMPLOYAL_HUD) - - //Handle possessive brain borers. - if(istype(obj,/mob/living/simple_animal/borer)) + if (istype(obj, /mob/living/simple_animal/borer)) var/mob/living/simple_animal/borer/worm = obj - if(worm.controlling) + if (worm.controlling) target.release_control() worm.detatch() worm.leave_host() + playsound(target.loc, 'sound/effects/squelch1.ogg', 15, TRUE) + if (i == 1 || !user.do_skilled(3 SECONDS, SKILL_ANATOMY, target, 0.3, DO_SURGERY) || !user.use_sanity_check(target, tool)) + break - playsound(target.loc, 'sound/effects/squelch1.ogg', 15, 1) - else - user.visible_message(SPAN_NOTICE("[user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out."), \ - SPAN_NOTICE("You could not find anything inside [target]'s [affected.name].") ) - /singleton/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) ..() var/obj/item/organ/external/affected = target.get_organ(target_zone) diff --git a/code/modules/xenoarcheaology/anomaly_container.dm b/code/modules/xenoarcheaology/anomaly_container.dm index ebbb033d1e712..aa28ab274fe08 100644 --- a/code/modules/xenoarcheaology/anomaly_container.dm +++ b/code/modules/xenoarcheaology/anomaly_container.dm @@ -41,7 +41,7 @@ if(!src.allowed(user)) to_chat(user, SPAN_WARNING("\The [src] blinks red, notifying you of your incorrect access.")) return - if(!src.health_dead) + if(!src.health_dead()) user.visible_message( SPAN_NOTICE("\The [user] begins undoing the locks and latches on \the [src]..."), SPAN_NOTICE("You begin undoing the locks and latches on \the [src]...") @@ -71,7 +71,7 @@ if(!src.allowed(user)) to_chat(user, SPAN_WARNING("\The [src] blinks red, notifying you of your incorrect access.")) return - if(!src.health_dead) + if(!src.health_dead()) user.visible_message( SPAN_NOTICE("\The [user] begins undoing the locks and latches on \the [src]..."), SPAN_NOTICE("You begin undoing the locks and latches on \the [src]...") @@ -95,7 +95,7 @@ if (attached_paper) to_chat(usr, SPAN_NOTICE("There's a paper clipped on the side.")) attached_paper.examine(user, distance) - if (health_dead) + if (health_dead()) to_chat(usr, SPAN_DANGER("The borosilicate panels are completely shattered.")) /obj/machinery/anomaly_container/proc/contain(obj/machinery/artifact) @@ -146,7 +146,7 @@ /obj/machinery/anomaly_container/emp_act(severity) SHOULD_CALL_PARENT(FALSE) - if(health_dead) + if(health_dead()) return if(contained) visible_message(SPAN_DANGER("\The [src]'s latches break loose, freeing the contents!")) @@ -174,7 +174,7 @@ return TRUE if (istype(P, /obj/item/stack/material)) - if (!health_dead) + if (!health_dead()) to_chat(user, SPAN_NOTICE("\The [src] doesn't require repairs.")) return TRUE if (contained) @@ -211,7 +211,7 @@ return TRUE if (isWrench(P)) - if (!health_dead) + if (!health_dead()) return TRUE user.visible_message( @@ -234,7 +234,7 @@ /obj/machinery/anomaly_container/on_update_icon() ClearOverlays() - if(health_dead) + if(health_dead()) icon_state = "anomaly_container_broken" if(attached_paper) AddOverlays("anomaly_container_paper") diff --git a/html/changelog.html b/html/changelog.html index 1bdb1abd67b69..5c2343f1e37f5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,195 @@