diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml index 48967b95f0aa3..bf11bf4ea04d0 100644 --- a/.github/workflows/cancel.yml +++ b/.github/workflows/cancel.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 3 steps: - - uses: styfle/cancel-workflow-action@01ce38bf961b4e243a6342cbade0dbc8ba3f0432 + - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa with: workflow_id: 3545321 access_token: ${{ github.token }} diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index dfa4a1dabba38..8cf42cbcc00f4 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -19,7 +19,7 @@ jobs: - name: checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: paths-filter - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 + uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd id: filter with: filters: .github/workflow-config/preflight-filters.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 481b5cbb5b742..c7a9ca371377b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: - name: checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: paths-filter - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 + uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd id: filter with: filters: .github/workflow-config/preflight-filters.yml diff --git a/baystation12.dme b/baystation12.dme index c068cf0adfcc9..1b19e22923c96 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -88,8 +88,8 @@ #include "code\__defines\xenoarcheaology.dm" #include "code\__defines\ZAS.dm" #include "code\__defines\zmimic.dm" -#include "code\__defines\~mods\rust_g.dm" #include "code\__defines\~mods\expanded_culture_descriptor.dm" +#include "code\__defines\~mods\rust_g.dm" #include "code\__defines\~mods\~master_defines.dm" #include "code\_global_vars\edible.dm" #include "code\_global_vars\logging.dm" @@ -3366,6 +3366,7 @@ #include "mods\_master_files\code\modules\events\gravity.dm" #include "mods\_master_files\code\modules\mob\new_player\new_player.dm" #include "mods\_master_files\code\modules\power\gravitygenerator.dm" +#include "mods\_master_files\code\modules\projectiles\projectile\bullets.dm" #include "mods\_master_files\maps\mapsystem\maps.dm" #include "mods\_master_files\maps\sierra\sierra_ranks.dm" #include "mods\_master_files\maps\sierra\items\rigs.dm" diff --git a/code/__defines/~mods/~master_defines.dm b/code/__defines/~mods/~master_defines.dm index 7d788238af008..8b77841503b83 100644 --- a/code/__defines/~mods/~master_defines.dm +++ b/code/__defines/~mods/~master_defines.dm @@ -23,6 +23,8 @@ // UTF8 - End // DON_LOADOUT - Start +// Не открывать до Рождества +/* #define DONATION_TIER_NONE null #define DONATION_TIER_ONE "Tier 1" #define DONATION_TIER_TWO "Tier 2" @@ -41,6 +43,7 @@ DONATION_TIER_NONE, DONATION_TIER_ONE, \ DONATION_TIER_TWO, DONATION_TIER_THREE, \ DONATION_TIER_FOUR, DONATION_TIER_ADMIN) +*/ // DON_LOADOUT - End // GLIDING - Start diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 90213e96bde3b..450a0130e7709 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -307,6 +307,8 @@ var/global/list/radial_menus = list() /proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE, list/check_locs, use_labels = FALSE) if(!user || !anchor || !length(choices)) return + if (istype(user.loc, /mob/living/exosuit)) + anchor = user.loc if(!uniqueid) uniqueid = "defmenu_[any2ref(user)]_[any2ref(anchor)]" diff --git a/code/controllers/subsystems/initialization/robots.dm b/code/controllers/subsystems/initialization/robots.dm index ca1eb2913fc42..e3af38b0344a3 100644 --- a/code/controllers/subsystems/initialization/robots.dm +++ b/code/controllers/subsystems/initialization/robots.dm @@ -15,6 +15,9 @@ SUBSYSTEM_DEF(robots) ) var/list/mmi_types_by_title = list( + // [SIERRA-ADD] - Allow to join as cyborg, + "cyborg" = /obj/item/device/mmi, + // [/SIERRA-ADD] , "robot" = /obj/item/organ/internal/posibrain, "drone" = /obj/item/device/mmi/digital/robot, "robot, flying" = /obj/item/organ/internal/posibrain, diff --git a/code/controllers/subsystems/jobs.dm b/code/controllers/subsystems/jobs.dm index 7ab726d00b79a..233a82a703a4c 100644 --- a/code/controllers/subsystems/jobs.dm +++ b/code/controllers/subsystems/jobs.dm @@ -397,7 +397,7 @@ SUBSYSTEM_DEF(jobs) for(var/required in G.allowed_skills) if(!H.skill_check(required,G.allowed_skills[required])) permitted = 0 - + // [SIERRA-ADD] - LOADOUT_ITEMS - Поддержка фракционных предметов в лодауте if(permitted && G.allowed_factions) var/singleton/cultural_info/faction = H.get_cultural_value(TAG_FACTION) diff --git a/code/datums/communication/ooc.dm b/code/datums/communication/ooc.dm index 1d112c3d886cb..9d51816fc2f51 100644 --- a/code/datums/communication/ooc.dm +++ b/code/datums/communication/ooc.dm @@ -35,14 +35,16 @@ var/ooc_color = C.prefs.ooccolor // [SIERRA-ADD] - DON_LOADOUT - var/ckey_prefix = C.donator_info.get_decorated_message(C, "[C.key]:") + // Не открывать до Рождества + // var/ckey_prefix = C.donator_info.get_decorated_message(C, "[C.key]:") // [/SIERRA-ADD] for(var/client/target in GLOB.clients) if(target.is_key_ignored(C.key)) // If we're ignored by this person, then do nothing. continue // [SIERRA-EDIT] - DON_LOADOUT - // var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [C.key]: [SPAN_CLASS("message linkify", "[message]")]" // SIERRA-EDIT - ORIGINAL - var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [ckey_prefix] [SPAN_CLASS("message linkify", "[message]")]" + // Не открывать до Рождества + var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [C.key]: [SPAN_CLASS("message linkify", "[message]")]" // SIERRA-EDIT - ORIGINAL + // var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [ckey_prefix] [SPAN_CLASS("message linkify", "[message]")]" // [/SIERRA-EDIT] if(can_badmin) receive_communication(C, target, SPAN_COLOR(ooc_color, SPAN_CLASS("ooc", sent_message))) diff --git a/code/datums/vote/transfer.dm b/code/datums/vote/transfer.dm index 7acc75d71a914..79f8041713078 100644 --- a/code/datums/vote/transfer.dm +++ b/code/datums/vote/transfer.dm @@ -1,5 +1,5 @@ -#define CHOICE_TRANSFER "Initiate crew transfer" -#define CHOICE_EXTEND "Extend the round ([config.vote_autotransfer_interval / 600] minutes)" +#define CHOICE_TRANSFER "Initiate bluespace jump" +#define CHOICE_EXTEND "Extend the round ([config.vote_autotransfer_interval] minutes)" #define CHOICE_ADD_ANTAG "Add antagonist" /datum/vote/transfer @@ -17,10 +17,10 @@ return //Mods bypass further checks. var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) if (!automatic && security_state.current_security_level_is_same_or_higher_than(security_state.high_security_level)) - to_chat(creator, "The current alert status is too high to call for a crew transfer!") + to_chat(creator, "The current alert status is too high to call for a bluespace jump!") return FALSE if(GAME_STATE <= RUNLEVEL_SETUP) - to_chat(creator, "The crew transfer button has been disabled!") + to_chat(creator, "The bluespace jump button has been disabled!") return FALSE /datum/vote/transfer/setup_vote(mob/creator, automatic) @@ -45,7 +45,7 @@ else factor = 1.4 choices[CHOICE_TRANSFER] = round(choices[CHOICE_TRANSFER] * factor) - to_world(SPAN_COLOR("purple", "Crew Transfer Factor: [factor]")) + to_world(SPAN_COLOR("purple", "Bluespace Jump Factor: [factor]")) /datum/vote/transfer/report_result() if(..()) diff --git a/code/game/antagonist/outsider/vox.dm b/code/game/antagonist/outsider/vox.dm index cf9c014f9e1ea..f68a82056f101 100644 --- a/code/game/antagonist/outsider/vox.dm +++ b/code/game/antagonist/outsider/vox.dm @@ -93,7 +93,6 @@ GLOBAL_LIST_EMPTY(vox_artifact_spawners) desc = "A pulsating mass of flesh and steel." icon = 'maps/antag_spawn/vox/vox.dmi' icon_state = "printer" - breakable = FALSE anchored = TRUE density = TRUE var/favors = 0 @@ -269,7 +268,6 @@ GLOBAL_LIST_EMPTY(vox_artifact_spawners) desc = "An old, dusty machine meant to analyze various bluespace anomalies and send research data directly to SCGEC Observatory." icon = 'icons/obj/machines/research/xenoarcheology_scanner.dmi' icon_state = "scanner" - breakable = FALSE anchored = FALSE density = TRUE var/points = 0 diff --git a/code/game/machinery/_machines_base/machinery.dm b/code/game/machinery/_machines_base/machinery.dm index 372bc39ded8af..82845ae4cfc6b 100644 --- a/code/game/machinery/_machines_base/machinery.dm +++ b/code/game/machinery/_machines_base/machinery.dm @@ -236,7 +236,7 @@ // If you don't call parent in this proc, you must make all appropriate checks yourself. // If you do, you must respect the return value. /obj/machinery/attack_hand(mob/user) - if((. = ..())) // Buckling, climbers, punching on harm; unlikely to return true. + if((. = ..())) // Buckling, climbers; unlikely to return true unless on harm intent and damage is dealt. return if(!CanPhysicallyInteract(user)) return FALSE // The interactions below all assume physical access to the machine. If this is not the case, we let the machine take further action. diff --git a/code/game/machinery/bluespace_drive.dm b/code/game/machinery/bluespace_drive.dm index 3a4be5d9f5b10..c65ebbfd420b4 100644 --- a/code/game/machinery/bluespace_drive.dm +++ b/code/game/machinery/bluespace_drive.dm @@ -218,8 +218,15 @@ continue if (GLOB.using_map.use_bluespace_interlude && prob(interlude_teleport_chance)) - addtimer(new Callback(GLOBAL_PROC, /proc/do_unstable_teleport_safe, mob, GetConnectedZlevels(mob.z)), rand(1, 2) MINUTES) - GLOB.using_map.do_interlude_teleport(mob, duration = rand(1, 2.5) MINUTES) + if (istype(mob, /mob/living/simple_animal) && prob(80)) + return + var/turf/T = pick_area_turf_in_connected_z_levels( + list(/proc/is_not_space_area), + list(/proc/not_turf_contains_dense_objects, /proc/IsTurfAtmosSafe), + zlevels[1]) + if (!T) + return + GLOB.using_map.do_interlude_teleport(mob, T, rand(1, 2.5) MINUTES) return if (mob != being) var/source_position = being.loc diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index a0cae74b6899a..2d2b403ef91e6 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -242,6 +242,9 @@ /obj/attack_hand(mob/living/user) + . = ..() + if (.) + return if (Adjacent(user)) add_fingerprint(user) @@ -276,7 +279,6 @@ ) damage_health(damage, attack.get_damage_type(), attack.damage_flags()) return TRUE - ..() /obj/is_fluid_pushable(amt) return ..() && w_class <= round(amt/20) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 4d5dec82835d9..0873dd7182ccb 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -3,7 +3,7 @@ w_class = ITEM_SIZE_NO_CONTAINER layer = STRUCTURE_LAYER - var/breakable + var/fragile var/parts var/list/connections = list("0", "0", "0", "0") var/list/other_connections = list("0", "0", "0", "0") @@ -16,7 +16,7 @@ /obj/structure/damage_health(damage, damage_type, damage_flags, severity, skip_can_damage_check) if (damage && HAS_FLAGS(damage_flags, DAMAGE_FLAG_TURF_BREAKER)) - if (breakable) + if (fragile) return kill_health() damage = max(damage, 10) ..() @@ -117,6 +117,15 @@ return ..() +/obj/structure/proc/dump_contents() + for(var/mob/M in src) + M.dropInto(loc) + if(M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + + for(var/atom/movable/AM in src) + AM.dropInto(loc) /obj/structure/proc/can_visually_connect() return anchored diff --git a/code/game/objects/structures/crates_lockers/closets/__closet.dm b/code/game/objects/structures/crates_lockers/closets/__closet.dm index 687bfcbe66340..c89398ebfe9ec 100644 --- a/code/game/objects/structures/crates_lockers/closets/__closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/__closet.dm @@ -6,6 +6,7 @@ density = TRUE w_class = ITEM_SIZE_NO_CONTAINER health_max = 100 + health_min_damage = 3 var/welded = 0 var/large = 1 @@ -71,6 +72,14 @@ else to_chat(user, "It is full.") +/obj/structure/closet/damage_health(damage, damage_type, damage_flags, severity, skip_can_damage_check) + . = ..() + if (!length(contents)) + return + var/content_damage = damage / length(contents) + for (var/atom/victim as anything in contents) + victim.damage_health(content_damage, damage_type, damage_flags, severity, skip_can_damage_check) + /obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group || (height==0 || wall_mounted)) return 1 return (!density) @@ -92,16 +101,6 @@ return FALSE return TRUE -/obj/structure/closet/proc/dump_contents() - for(var/mob/M in src) - M.dropInto(loc) - if(M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - - for(var/atom/movable/AM in src) - AM.dropInto(loc) - /obj/structure/closet/proc/store_contents() var/stored_units = 0 @@ -402,8 +401,10 @@ to_chat(user, SPAN_NOTICE("It won't budge!")) /obj/structure/closet/attack_hand(mob/user as mob) - src.add_fingerprint(user) - src.toggle(user) + if (user.a_intent == I_HURT) + return ..() + add_fingerprint(user) + toggle(user) /obj/structure/closet/attack_ghost(mob/ghost) if(ghost.client && ghost.client.inquisitive_ghost) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm index 46660b3f8e5d8..07b4d7993a191 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm @@ -6,6 +6,7 @@ setup = CLOSET_HAS_LOCK | CLOSET_CAN_BE_WELDED locked = TRUE health_max = 200 + health_min_damage = 5 /obj/structure/closet/secure_closet/slice_into_parts(obj/item/weldingtool/WT, mob/user) to_chat(user, SPAN_NOTICE("\The [src] is too strong to be taken apart.")) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index f0c1f2078a5ba..58d2681264ac7 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -90,6 +90,8 @@ closet_appearance = /singleton/closet_appearance/crate/secure setup = CLOSET_HAS_LOCK locked = TRUE + health_max = 200 + health_min_damage = 5 /obj/structure/closet/crate/secure/Initialize() . = ..() diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 801ffce12f025..b428c5b716720 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -5,6 +5,8 @@ icon_state = "densecrate" density = TRUE atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + health_max = 100 + health_min_damage = 4 /obj/structure/largecrate/Initialize() . = ..() @@ -14,17 +16,16 @@ I.forceMove(src) /obj/structure/largecrate/attack_hand(mob/user as mob) + if (user.a_intent == I_HURT) + return ..() to_chat(user, SPAN_NOTICE("You need a crowbar to pry this open!")) - return - /obj/structure/largecrate/use_tool(obj/item/tool, mob/user, list/click_params) // Crowbar - Open crate if (isCrowbar(tool)) var/obj/item/stack/material/wood/A = new(loc) transfer_fingerprints_to(A) - for (var/atom/movable/item as anything in contents) - item.dropInto(loc) + dump_contents() user.visible_message( SPAN_NOTICE("\The [user] pries \the [src] open with \a [tool]."), SPAN_NOTICE("You pry \the [src] open with \the [tool]."), @@ -35,6 +36,11 @@ return ..() +/obj/structure/largecrate/on_death() + var/obj/item/stack/material/wood/A = new(loc) + transfer_fingerprints_to(A) + dump_contents() + qdel_self() /obj/structure/largecrate/mule name = "MULE crate" diff --git a/code/modules/client/preference_setup/general/05_preview.dm b/code/modules/client/preference_setup/general/05_preview.dm index 7d2a3df38a3e3..28fc46f739b05 100644 --- a/code/modules/client/preference_setup/general/05_preview.dm +++ b/code/modules/client/preference_setup/general/05_preview.dm @@ -17,8 +17,9 @@ /datum/preferences/proc/dress_preview_mob(mob/living/carbon/human/mannequin) // [SIERRA-ADD] - DON_LOADOUT - Mob preview - if(!mannequin) - return + // Не открывать до Рождества + // if(!mannequin) + // return // [/SIERRA-ADD] var/update_icon = FALSE copy_to(mannequin, TRUE) @@ -32,8 +33,9 @@ else return // [SIERRA-ADD] - DON_LOADOUT - Mob preview - if(!previewJob && mannequin.icon) - update_icon = TRUE // So we don't end up stuck with a borg/AI icon after setting their priority to non-high + // Не открывать до Рождества + // if(!previewJob && mannequin.icon) + // update_icon = TRUE // So we don't end up stuck with a borg/AI icon after setting their priority to non-high // [/SIERRA-ADD] if(preview_job && previewJob) mannequin.job = previewJob.title @@ -48,15 +50,15 @@ // Equip custom gear loadout, replacing any job items var/list/loadout_taken_slots = list() // [SIERRA-EDIT] - DON_LOADOUT - Trying gears - // for(var/thing in Gear()) // SIERRA-EDIT - ORIGINAL - var/list/accessories = list() - - var/list/orig_gears = Gear() - var/list/gears = orig_gears.Copy() - if(trying_on_gear) - gears[trying_on_gear] = trying_on_tweaks.Copy() - - for(var/thing in gears) + for(var/thing in Gear()) // SIERRA-EDIT - ORIGINAL + // var/list/accessories = list() + // + // var/list/orig_gears = Gear() + // var/list/gears = orig_gears.Copy() + // if(trying_on_gear) + // gears[trying_on_gear] = trying_on_tweaks.Copy() + // + // for(var/thing in gears) // [/SIERRA-EDIT] var/datum/gear/G = gear_datums[thing] if(G) @@ -73,19 +75,21 @@ if(!permitted) continue // [SIERRA-ADD] - DON_LOADOUT - Accessories preview - if(G.slot == slot_tie) - accessories.Add(G) - continue + // Не открывать до Рождества + // if(G.slot == slot_tie) + // accessories.Add(G) + // continue // [/SIERRA-ADD] if(G.slot && G.slot != slot_tie && !(G.slot in loadout_taken_slots) && G.spawn_on_mob(mannequin, gear_list[gear_slot][G.display_name])) loadout_taken_slots.Add(G.slot) update_icon = TRUE // [SIERRA-ADD] - DON_LOADOUT - Accessories preview // equip accessories after other slots so they don't attach to a suit which will be replaced - for(var/datum/gear/G in accessories) - G.spawn_as_accessory_on_mob(mannequin, gears[G.display_name]) - if(length(accessories)) - update_icon = TRUE + // Не открывать до Рождества + // for(var/datum/gear/G in accessories) + // G.spawn_as_accessory_on_mob(mannequin, gears[G.display_name]) + // if(length(accessories)) + // update_icon = TRUE // [/SIERRA-ADD] if(update_icon) mannequin.update_icons() diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm index cc05715403de7..dbc141c932cc4 100644 --- a/code/modules/emotes/definitions/_mob.dm +++ b/code/modules/emotes/definitions/_mob.dm @@ -135,6 +135,7 @@ /singleton/emote/visible/shrug, /singleton/emote/visible/smile, /singleton/emote/visible/pale, + /singleton/emote/audible/choke, /singleton/emote/visible/tremble, /singleton/emote/visible/wink, /singleton/emote/visible/hug, diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 11f760a59e9c3..b02d00e1bc749 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -44,7 +44,8 @@ var/singleton/emote/use_emote = usable_emotes[act] if(!use_emote) - to_chat(src, SPAN_WARNING("Unknown emote '[act]'. Type say *help for a list of usable emotes.")) + var/emote_prefix = get_prefix_key(/singleton/prefix/custom_emote) + to_chat(src, SPAN_WARNING("Unknown emote '[act]'. Type say [emote_prefix]help for a list of usable emotes.")) return if(m_type != use_emote.message_type && use_emote.conscious && stat != CONSCIOUS) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index f291299a6aafe..32f0ca83683ad 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -5,7 +5,10 @@ var/list/code = list() var/list/lastattempt = list() var/attempts = 10 - var/codelen = 4 + // [SIERRA-EDIT] - UTILITY_ITEMS - Multimeter Avoiding redeclare of var "codelen" + // var/codelen = 4 // SIERRA-EDIT - ORIGINAL + codelen = 4 + // [/SIERRA-EDIT] - UTILITY_ITEMS locked = 1 /obj/structure/closet/crate/secure/loot/New() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 08da1c8cc0116..35463efb1dcf4 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -475,7 +475,7 @@ machine_desc = "This nuclear generator uses a combination of uranium and, strangely, vodka. Rated for 150 kW max safe output." var/coolant_volume = 120 var/coolant_use = 1 - var/coolant_reagent = /datum/reagent/ethanol/vodka + var/datum/reagent/coolant_reagent = /datum/reagent/ethanol/vodka /obj/machinery/power/port_gen/pacman/super/potato/New() create_reagents(coolant_volume) @@ -503,18 +503,28 @@ if(power_output > max_safe_output) icon_state = "potatodanger" -/obj/machinery/power/port_gen/pacman/super/potato/use_tool(obj/item/O, mob/living/user, list/click_params) - if(istype(O, /obj/item/reagent_containers)) - var/obj/item/reagent_containers/R = O - if(R.standard_pour_into(src,user)) - if(reagents.has_reagent("vodka")) - audible_message(SPAN_NOTICE("[src] blips happily")) - playsound(get_turf(src),'sound/machines/synth_yes.ogg', 50, 0) - else - audible_message(SPAN_WARNING("[src] blips in disappointment")) - playsound(get_turf(src), 'sound/machines/synth_no.ogg', 50, 0) - return TRUE - return ..() +/obj/machinery/power/port_gen/pacman/super/potato/use_tool(obj/item/item, mob/living/user, list/click_params) + if (!istype(item, /obj/item/reagent_containers)) + return ..() + var/datum/reagents/item_reagents = item.reagents + if (!HAS_FLAGS(item.atom_flags, ATOM_FLAG_OPEN_CONTAINER)) + to_chat(user, SPAN_WARNING("\The [item] is closed.")) + else if (!item_reagents.has_reagent(coolant_reagent)) + to_chat(user, SPAN_WARNING("\The [src] needs [initial(coolant_reagent.name)] to run.")) + else if (length(item_reagents.reagent_list) > 1) + to_chat(user, SPAN_WARNING("The contents of \the [item] is impure.")) + else + var/obj/item/reagent_containers/container = item + var/transferred = item_reagents.trans_to_holder(reagents, container.amount_per_transfer_from_this) + if (transferred) + user.visible_message( + SPAN_ITALIC("\The [user] pours something from \the [item] into \the [src]."), + SPAN_ITALIC("You pour [transferred]u from \the [item] into \the [src]."), + SPAN_ITALIC("You hear a liquid gurgling.") + ) + else + to_chat(user, SPAN_WARNING("The [src] is full.")) + return TRUE /obj/machinery/power/port_gen/pacman/super/potato/reactor name = "nuclear reactor" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm index 5935eba1bfb7a..38eceee4c4c96 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm @@ -48,10 +48,10 @@ M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) /datum/reagent/nutriment/proc/adjust_nutrition(mob/living/carbon/M, removed) - var/nut_removed = removed - var/hyd_removed = removed if (HAS_TRAIT(M, /singleton/trait/boon/cast_iron_stomach)) removed *= 0.1 // Unathi get most of their nutrition from meat. + var/nut_removed = removed + var/hyd_removed = removed if(nutriment_factor) M.adjust_nutrition(nutriment_factor * nut_removed) // For hunger and fatness if(hydration_factor) diff --git a/code/modules/species/outsider/vox.dm b/code/modules/species/outsider/vox.dm index 76876f8f56c6b..c459bf92d902f 100644 --- a/code/modules/species/outsider/vox.dm +++ b/code/modules/species/outsider/vox.dm @@ -79,6 +79,7 @@ ) genders = list(NEUTER) + pronouns = list(PRONOUNS_THEY_THEM, PRONOUNS_IT_ITS) descriptors = list( /datum/mob_descriptor/height = -1, /datum/mob_descriptor/build = 1, diff --git a/code/modules/ventcrawl/ventcrawl_atmospherics.dm b/code/modules/ventcrawl/ventcrawl_atmospherics.dm index d356caa32424e..f0a54cbf1497e 100644 --- a/code/modules/ventcrawl/ventcrawl_atmospherics.dm +++ b/code/modules/ventcrawl/ventcrawl_atmospherics.dm @@ -20,6 +20,9 @@ /obj/machinery/atmospherics/relaymove(mob/living/user, direction) if(user.loc != src || !(direction & initialize_directions)) //can't go in a way we aren't connecting to return + // [SIERRA-ADD] - SSINPUT + direction &= ~(direction & ~initialize_directions) + // [SIERRA-ADD] ventcrawl_to(user,findConnecting(direction),direction) /obj/machinery/atmospherics/proc/ventcrawl_to(mob/living/user, obj/machinery/atmospherics/target_move, direction) diff --git a/html/changelog.html b/html/changelog.html index a15b8931ae647..894cc1d34c1af 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,96 @@