diff --git a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm index 6341438965e45..934f0ffe01efb 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm @@ -1232,7 +1232,9 @@ /turf/open/floor/plasteel/dark, /area/ruin/unpowered/listening_post/commons) "vJ" = ( -/obj/machinery/suit_storage_unit/mining/eva, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/syndicate, +/obj/item/clothing/head/helmet/space/syndicate, /turf/open/floor/plasteel/tech/grid, /area/ruin/unpowered/listening_post) "vR" = ( @@ -1762,12 +1764,12 @@ /turf/open/floor/plating, /area/ruin/unpowered/listening_post/engineering) "Gy" = ( -/obj/machinery/computer/telecomms/monitor{ - dir = 8 - }, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 }, +/obj/machinery/computer/telecomms/server{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/ruin/unpowered/listening_post/operations) "GB" = ( diff --git a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm index 67eb3e648365e..ed1febb808b27 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm @@ -3073,7 +3073,7 @@ pixel_x = -3 }, /obj/item/ammo_box/magazine/illestren_a850r, -/obj/item/storage/box/ammo/c9mm/ap, +/obj/item/storage/box/ammo/c9mm_ap, /obj/item/ammo_box/magazine/illestren_a850r, /obj/item/ammo_box/magazine/co9mm{ start_empty = 1 diff --git a/_maps/configs/syndicate_gorlex_komodo.json b/_maps/configs/syndicate_gorlex_komodo.json index 0cefb4ca08b3f..5044590efb151 100644 --- a/_maps/configs/syndicate_gorlex_komodo.json +++ b/_maps/configs/syndicate_gorlex_komodo.json @@ -1,5 +1,5 @@ { - "faction": "/datum/faction/syndicate", + "faction": "/datum/faction/syndicate/hardliners", "prefix": "ISV", "namelists": [ "GORLEX", diff --git a/_maps/shuttles/independent/independent_kilo.dmm b/_maps/shuttles/independent/independent_kilo.dmm index d0d7523167b96..38d9d1cc68537 100644 --- a/_maps/shuttles/independent/independent_kilo.dmm +++ b/_maps/shuttles/independent/independent_kilo.dmm @@ -661,7 +661,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/item/storage/box/ammo/a12g_rubbershot, +/obj/item/storage/box/ammo/a12g_buckshot, +/obj/item/gun/ballistic/shotgun/doublebarrel/presawn{ + default_ammo_type = 0 + }, /obj/structure/cable/pink{ icon_state = "4-10" }, diff --git a/_maps/shuttles/independent/independent_scarab.dmm b/_maps/shuttles/independent/independent_scarab.dmm index 83af7832fd565..99e4797077d23 100644 --- a/_maps/shuttles/independent/independent_scarab.dmm +++ b/_maps/shuttles/independent/independent_scarab.dmm @@ -3987,10 +3987,6 @@ dir = 5 }, /obj/structure/rack, -/obj/item/storage/box/ammo/a12g_rubbershot{ - pixel_x = -4; - pixel_y = 9 - }, /obj/item/storage/box/ammo/a12g_buckshot{ pixel_y = 2; pixel_x = 4 diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index 538c5717a8404..feef647c11424 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm @@ -13080,7 +13080,7 @@ /obj/item/storage/box/ammo/c9mm, /obj/item/storage/box/ammo/c9mm, /obj/item/storage/box/ammo/c9mm, -/obj/item/storage/box/ammo/c9mm/ap, +/obj/item/storage/box/ammo/c9mm_ap, /obj/item/stock_parts/cell/gun{ pixel_x = -3; pixel_y = -5 diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index 76847f40a3dcf..b38ddeee98921 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -344,6 +344,11 @@ /obj/effect/turf_decal/techfloor{ dir = 1 }, +/obj/item/radio/weather_monitor{ + pixel_x = 25; + anchored = 1; + name = "barometric monitor" + }, /turf/open/floor/circuit/telecomms, /area/ship/science/ai_chamber) "cN" = ( @@ -463,9 +468,7 @@ }, /obj/effect/turf_decal/trimline/opaque/vired/arrow_ccw, /obj/machinery/light/dim/directional/north, -/turf/open/floor/plasteel/tech/techmaint{ - color = "#a8b2b6" - }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/central) "dC" = ( /obj/effect/turf_decal/ntspaceworks_small/right, @@ -590,9 +593,7 @@ /obj/machinery/advanced_airlock_controller{ pixel_y = 24 }, -/turf/open/floor/plasteel/tech/techmaint{ - color = "#a8b2b6" - }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/central) "eD" = ( /obj/machinery/power/apc/auto_name/directional/west, @@ -694,10 +695,10 @@ dir = 1 }, /obj/structure/platform/industrial{ - dir = 8 + dir = 4 }, /obj/structure/platform/industrial/corner{ - dir = 9 + dir = 8 }, /turf/open/floor/plasteel/dark, /area/ship/bridge) @@ -987,6 +988,7 @@ /obj/machinery/airalarm/directional/south, /obj/item/clothing/head/nanotrasen/beret/security/command, /obj/item/clothing/suit/armor/nanotrasen/sec_director, +/obj/item/clothing/under/nanotrasen/security/director, /turf/open/floor/wood, /area/ship/crew/dorm/captain) "hz" = ( @@ -1000,7 +1002,9 @@ /area/ship/crew/specialized/engineering) "hF" = ( /obj/machinery/light/dim/directional/north, -/obj/structure/closet/secure_closet/armorycage, +/obj/structure/closet/secure_closet/armorycage{ + req_access = list(1) + }, /obj/effect/turf_decal/industrial/fire, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 5 @@ -1402,7 +1406,7 @@ }, /obj/item/paper{ name = "NT Spaceworks Notice"; - default_raw_text = "Dear engineer, please bring your attention to the advanced control mechanisms present on and around this console. There is an external lighting switch to toggle the vessel's exterior lighting, highlighted in yellow, an aiar alarm connected to this console which controls external atmospherics fittings, and the console itself, which can read external atmosphere from a main sensor affixed to the port-side hull. -NT Spaceworks" + default_raw_text = "Dear engineer, please bring your attention to the advanced control mechanisms present on and around this console. There is an external lighting switch to toggle the vessel's exterior lighting, highlighted in yellow, an air alarm connected to this console which controls external atmospherics fittings, and the console itself, which can read external atmosphere from a main sensor affixed to the fore of the vessel. -NT Spaceworks" }, /turf/open/floor/plasteel/mono/dark, /area/ship/external/dark) @@ -2035,9 +2039,7 @@ /obj/effect/turf_decal/techfloor{ dir = 8 }, -/turf/open/floor/plasteel/tech/techmaint{ - color = "#a8b2b6" - }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/central) "oq" = ( /obj/structure/cable/cyan{ @@ -2274,7 +2276,6 @@ /obj/machinery/camera/autoname{ dir = 1 }, -/obj/machinery/air_sensor/external, /obj/item/radio/intercom/directional/south, /obj/machinery/light/floor, /turf/open/floor/engine/hull, @@ -2636,9 +2637,7 @@ /obj/machinery/camera/autoname{ dir = 10 }, -/turf/open/floor/plasteel/tech/techmaint{ - color = "#a8b2b6" - }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/central) "sJ" = ( /turf/closed/wall/mineral/titanium/nodiagonal, @@ -3432,6 +3431,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/plasteel/tech, /area/ship/engineering/engines/port) "yf" = ( @@ -3661,7 +3661,8 @@ }, /obj/structure/filingcabinet/chestdrawer{ dir = 4; - pixel_x = -6 + pixel_x = -6; + density = 0 }, /obj/structure/cable{ icon_state = "4-8" @@ -3774,6 +3775,9 @@ }, /obj/structure/closet/cabinet, /obj/machinery/light/small/directional/south, +/obj/item/clothing/head/nanotrasen/cap/security, +/obj/item/clothing/under/nanotrasen/science, +/obj/item/clothing/under/nanotrasen/medical/paramedic, /turf/open/floor/plasteel/tech, /area/ship/crew/specialized/medical) "AF" = ( @@ -4172,9 +4176,7 @@ /obj/effect/turf_decal/techfloor{ dir = 8 }, -/turf/open/floor/plasteel/tech/techmaint{ - color = "#a8b2b6" - }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/central) "CW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -4431,6 +4433,10 @@ }, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/storage/ration/cheese_pizza_slice, +/obj/item/storage/ration/pepperoni_pizza_slice, /turf/open/floor/plasteel/tech, /area/ship/cargo) "EE" = ( @@ -5525,6 +5531,8 @@ pixel_y = -10 }, /obj/item/clothing/suit/hooded/wintercoat, +/obj/item/storage/backpack/duffelbag, +/obj/item/storage/backpack/duffelbag, /turf/open/floor/plasteel/tech, /area/ship/engineering/engines/starboard) "MR" = ( @@ -5902,6 +5910,13 @@ }, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) +"Pa" = ( +/obj/structure/catwalk/over/plated_catwalk/dark{ + name = "sensor protection plate" + }, +/obj/machinery/air_sensor/external, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/external/dark) "Pd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -5972,6 +5987,11 @@ /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos, /obj/machinery/airalarm/directional/north, /obj/machinery/light/small/directional/west, +/obj/item/clothing/head/nanotrasen/cap/security, +/obj/item/clothing/under/nanotrasen/science/robotics, +/obj/item/clothing/under/nanotrasen/engineering, +/obj/item/clothing/under/nanotrasen/engineering/atmos, +/obj/item/clothing/under/nanotrasen/engineering/director, /turf/open/floor/wood, /area/ship/crew/specialized/engineering) "PG" = ( @@ -6040,6 +6060,8 @@ /obj/machinery/camera/autoname{ dir = 6 }, +/obj/item/clothing/under/nanotrasen/supply, +/obj/item/clothing/under/nanotrasen/supply/miner, /turf/open/floor/plasteel/tech, /area/ship/crew/specialized/cargo) "PR" = ( @@ -6126,7 +6148,9 @@ /turf/open/floor/engine/hull, /area/ship/external/dark) "Rn" = ( -/obj/structure/closet/secure_closet/armorycage, +/obj/structure/closet/secure_closet/armorycage{ + req_access = list(1) + }, /obj/effect/turf_decal/industrial/fire, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 9 @@ -6147,14 +6171,6 @@ pixel_x = -1; pixel_y = 9 }, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -10; - pixel_y = -14 - }, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -1; - pixel_y = -14 - }, /obj/item/flashlight/seclite{ pixel_x = 5; pixel_y = 4 @@ -6169,6 +6185,18 @@ pixel_x = 5; pixel_y = -11 }, +/obj/item/clothing/mask/gas/vigilitas, +/obj/item/clothing/mask/gas/vigilitas, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -1; + pixel_y = -14; + name = "half-mask respirator" + }, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -1; + pixel_y = -14; + name = "half-mask respirator" + }, /turf/open/floor/plasteel/tech, /area/ship/storage/equip) "Ro" = ( @@ -6200,9 +6228,7 @@ /obj/effect/turf_decal/techfloor{ dir = 4 }, -/turf/open/floor/plasteel/tech/techmaint{ - color = "#a8b2b6" - }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/central) "RM" = ( /obj/structure/chair/sofa/brown/left/directional/west, @@ -6893,6 +6919,7 @@ /obj/item/clothing/shoes/sneakers/black{ pixel_y = -10 }, +/obj/item/clothing/suit/hooded/wintercoat, /turf/open/floor/plasteel/dark, /area/ship/crew/cryo) "XL" = ( @@ -7203,6 +7230,8 @@ /obj/machinery/firealarm/directional/west, /obj/item/clothing/head/nanotrasen/beret/security, /obj/item/clothing/head/nanotrasen/cap/security, +/obj/item/clothing/under/nanotrasen/security, +/obj/item/clothing/under/nanotrasen/security/director, /turf/open/floor/plasteel/tech, /area/ship/crew/specialized/security) "Zw" = ( @@ -8627,7 +8656,7 @@ zW zW zW zW -wq +Pa zW Lk LU diff --git a/_maps/shuttles/pgf/pgf_woeful_cthonian.dmm b/_maps/shuttles/pgf/pgf_woeful_cthonian.dmm index a04c729df8ef6..0e6a33de1aeb9 100644 --- a/_maps/shuttles/pgf/pgf_woeful_cthonian.dmm +++ b/_maps/shuttles/pgf/pgf_woeful_cthonian.dmm @@ -120,7 +120,7 @@ }, /obj/structure/catwalk/over, /obj/structure/platform{ - dir = 8 + dir = 4 }, /turf/open/floor/plating, /area/ship/engineering) @@ -922,7 +922,7 @@ }, /obj/structure/catwalk/over, /obj/structure/platform{ - dir = 8 + dir = 4 }, /turf/open/floor/plating, /area/ship/engineering) @@ -983,7 +983,7 @@ /obj/machinery/light/directional/north, /obj/machinery/power/ship_gravity, /obj/structure/platform{ - dir = 8 + dir = 4 }, /turf/open/floor/plasteel/tech, /area/ship/engineering) @@ -1033,9 +1033,6 @@ /obj/machinery/turretid/ship{ pixel_x = 26 }, -/obj/machinery/computer/cargo{ - dir = 8 - }, /obj/effect/turf_decal/techfloor{ dir = 4 }, @@ -1046,7 +1043,12 @@ name = "bridge shutter control" }, /obj/structure/platform/ship_two{ - dir = 8 + dir = 5 + }, +/obj/machinery/computer/cargo{ + dir = 8; + layer = 3.1; + pixel_y = -2 }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) @@ -1094,10 +1096,12 @@ dir = 4 }, /obj/machinery/computer/helm{ - dir = 8 + dir = 8; + layer = 3.1; + pixel_y = 5 }, /obj/structure/platform/ship_two{ - dir = 8 + dir = 6 }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) @@ -1366,13 +1370,14 @@ /obj/structure/table/reinforced, /obj/item/radio/intercom/wideband/table{ dir = 4; - pixel_y = 4 + pixel_y = 0; + pixel_x = 1 }, /obj/item/desk_flag/gezena{ pixel_x = 8 }, /obj/structure/platform/ship_two{ - dir = 8 + dir = 4 }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) @@ -3246,7 +3251,7 @@ }, /obj/machinery/light/directional/south, /obj/structure/platform{ - dir = 8 + dir = 4 }, /turf/open/floor/plasteel/tech, /area/ship/engineering) diff --git a/auxmos.dll b/auxmos.dll index 0df77c97b2874..ae9b9dbf52947 100644 Binary files a/auxmos.dll and b/auxmos.dll differ diff --git a/code/__DEFINES/factions.dm b/code/__DEFINES/factions.dm index 596060d6610e5..1fa102e8687aa 100644 --- a/code/__DEFINES/factions.dm +++ b/code/__DEFINES/factions.dm @@ -16,6 +16,7 @@ #define FACTION_SYNDICATE "Syndicate" #define FACTION_NGR "New Gorlex Republic" #define FACTION_CYBERSUN "CyberSun" + #define FACTION_HARDLINERS "Hardliners" #define FACTION_SUNS "Student-Union of Naturalistic Sciences" #define FACTION_SOLGOV "SolGov" #define FACTION_SRM "Saint-Roumain Militia" @@ -31,6 +32,7 @@ #define PREFIX_SYNDICATE list("SEV", "SSV") #define PREFIX_NGR list("NGRV") #define PREFIX_CYBERSUN list("CSSV") + #define PREFIX_HARDLINERS list("ISV") #define PREFIX_SUNS list("SUNS") #define PREFIX_SOLGOV list("SCSV") #define PREFIX_SRM list("SRSV") diff --git a/code/__HELPERS/bindings.dm b/code/__HELPERS/bindings.dm index c2c19136854e2..ee88cb7038008 100644 --- a/code/__HELPERS/bindings.dm +++ b/code/__HELPERS/bindings.dm @@ -11,174 +11,235 @@ #define AUXMOS (__auxmos || __detect_auxmos()) +/proc/byondapi_stack_trace(msg) + CRASH(msg) + +/// Returns: true. Parses gas strings like "o2=2500;plasma=5000;TEMP=370" and turns src mixes into the parsed gas mixture, invalid patterns will be ignored /datum/gas_mixture/proc/__auxtools_parse_gas_string(string) return call_ext(AUXMOS, "byond:parse_gas_string_ffi")(src, string) +/// Returns: the total amount of gas mixtures in the arena, including "free" ones. /datum/controller/subsystem/air/proc/get_max_gas_mixes() return call_ext(AUXMOS, "byond:hook_max_gas_mixes_ffi")() +/// Returns: the amount of gas mixtures that are attached to a byond gas mixture. /datum/controller/subsystem/air/proc/get_amt_gas_mixes() return call_ext(AUXMOS, "byond:hook_amt_gas_mixes_ffi")() +/// Args: (list). Takes every gas in the list and makes them all identical, scaled to their respective volumes. The total heat and amount of substance in all of the combined gases is conserved. /proc/equalize_all_gases_in_list(gas_list) return call_ext(AUXMOS, "byond:equalize_all_hook_ffi")(gas_list) +/// Args: (temperature). Returns: how much oxidizer for fire is in the mixture at the given temperature. If temperature is omitted, just uses current temperature instead. /datum/gas_mixture/proc/get_oxidation_power(temp) return call_ext(AUXMOS, "byond:oxidation_power_hook_ffi")(src, temp) +/// Args: (temperature). Returns: how much fuel for fire is in the mixture at the given temperature. If temperature is omitted, just uses current temperature instead. /datum/gas_mixture/proc/get_fuel_amount(temp) return call_ext(AUXMOS, "byond:fuel_amount_hook_ffi")(src, temp) +/// Args: (mixture). Makes `src` a copy of `mixture`, with volumes taken into account. /datum/gas_mixture/proc/equalize_with(total) return call_ext(AUXMOS, "byond:equalize_with_hook_ffi")(src, total) +/// Args: (mixture, ratio). Transfers `ratio` of `src` to `mixture`. /datum/gas_mixture/proc/transfer_ratio_to(other, ratio) return call_ext(AUXMOS, "byond:transfer_ratio_hook_ffi")(src, other, ratio) +/// Args: (mixture, amount). Takes the `amount` given and transfers it from `src` to `mixture`. /datum/gas_mixture/proc/transfer_to(other, moles) return call_ext(AUXMOS, "byond:transfer_hook_ffi")(src, other, moles) +/// Args: (heat). Adds a given amount of heat to the mixture, i.e. in joules taking into account capacity. /datum/gas_mixture/proc/adjust_heat(temp) return call_ext(AUXMOS, "byond:adjust_heat_hook_ffi")(src, temp) +/// Args: (holder). Runs all reactions on this gas mixture. Holder is used by the reactions, and can be any arbitrary datum or null. /datum/gas_mixture/proc/react(holder) return call_ext(AUXMOS, "byond:react_hook_ffi")(src, holder) +/// Returns: true if the two mixtures are different enough for processing, false otherwise. /datum/gas_mixture/proc/compare(other) return call_ext(AUXMOS, "byond:compare_hook_ffi")(src, other) +/// Clears the gas mixture my removing all of its gases. /datum/gas_mixture/proc/clear() return call_ext(AUXMOS, "byond:clear_hook_ffi")(src) +/// Marks the mix as immutable, meaning it will never change. This cannot be undone. /datum/gas_mixture/proc/mark_immutable() return call_ext(AUXMOS, "byond:mark_immutable_hook_ffi")(src) +/// Args: (mixture, ratio, gas_list). Takes gases given by `gas_list` and moves `ratio` amount of those gases from `src` into `mixture`. /datum/gas_mixture/proc/scrub_into(into, ratio_v, gas_list) return call_ext(AUXMOS, "byond:scrub_into_hook_ffi")(src, into, ratio_v, gas_list) +/// Args: (flag). As get_gases(), but only returns gases with the given flag. /datum/gas_mixture/proc/get_by_flag(flag_val) return call_ext(AUXMOS, "byond:get_by_flag_hook_ffi")(src, flag_val) +/// Args: (mixture, flag, amount). Takes `amount` from src that have the given `flag` and puts them into the given `mixture`. Returns: 0 if gas didn't have any with that flag, 1 if it did. /datum/gas_mixture/proc/__remove_by_flag(into, flag_val, amount_val) return call_ext(AUXMOS, "byond:remove_by_flag_hook_ffi")(src, into, flag_val, amount_val) +/// Args: (coefficient). Divides all gases by this amount. /datum/gas_mixture/proc/divide(num_val) return call_ext(AUXMOS, "byond:divide_hook_ffi")(src, num_val) +/// Args: (coefficient). Multiplies all gases by this amount. /datum/gas_mixture/proc/multiply(num_val) return call_ext(AUXMOS, "byond:multiply_hook_ffi")(src, num_val) +/// Args: (amount). Subtracts the given amount from each gas. /datum/gas_mixture/proc/subtract(num_val) return call_ext(AUXMOS, "byond:subtract_hook_ffi")(src, num_val) +/// Args: (amount). Adds the given amount to each gas. /datum/gas_mixture/proc/add(num_val) return call_ext(AUXMOS, "byond:add_hook_ffi")(src, num_val) +/// Args: (gas_id_1, amount_1, gas_id_2, amount_2, ...). As adjust_moles, but with variadic arguments. /datum/gas_mixture/proc/adjust_multi(...) var/list/args_copy = args.Copy() args_copy.Insert(1, src) return call_ext(AUXMOS, "byond:adjust_multi_hook_ffi")(arglist(args_copy)) +/// Args: (gas_id, moles, temp). Adjusts the given gas's amount by the given amount, with that gas being treated as if it is at the given temperature. /datum/gas_mixture/proc/adjust_moles_temp(id_val, num_val, temp_val) return call_ext(AUXMOS, "byond:adjust_moles_temp_hook_ffi")(src, id_val, num_val, temp_val) +/// Args: (gas_id, moles). Adjusts the given gas's amount by the given amount, e.g. (GAS_O2, -0.1) will remove 0.1 moles of oxygen from the mixture. /datum/gas_mixture/proc/adjust_moles(id_val, num_val) return call_ext(AUXMOS, "byond:adjust_moles_hook_ffi")(src, id_val, num_val) +/// Args: (gas_id, moles). Sets the amount of substance of the given gas, in moles. /datum/gas_mixture/proc/set_moles(gas_id, amt_val) return call_ext(AUXMOS, "byond:set_moles_hook_ffi")(src, gas_id, amt_val) +/// Args: (gas_id). Returns: the amount of substance of the given gas, in moles. /datum/gas_mixture/proc/get_moles(gas_id) return call_ext(AUXMOS, "byond:get_moles_hook_ffi")(src, gas_id) +/// Args: (volume). Sets the volume of the gas. /datum/gas_mixture/proc/set_volume(vol_arg) return call_ext(AUXMOS, "byond:set_volume_hook_ffi")(src, vol_arg) +/// Args: (gas_id). Returns the heat capacity from the given gas, in J/K (probably). /datum/gas_mixture/proc/partial_heat_capacity(gas_id) return call_ext(AUXMOS, "byond:partial_heat_capacity_ffi")(src, gas_id) +/// Args: (temperature). Sets the temperature of the mixture. Will be set to 2.7 if it's too low. /datum/gas_mixture/proc/set_temperature(arg_temp) return call_ext(AUXMOS, "byond:set_temperature_hook_ffi")(src, arg_temp) +/// Returns: a list of the gases in the mixture, associated with their IDs. /datum/gas_mixture/proc/get_gases() return call_ext(AUXMOS, "byond:get_gases_hook_ffi")(src) +/// Args: (src, mixture, conductivity) or (src, conductivity, temperature, heat_capacity). Adjusts temperature of src based on parameters. Returns: temperature of sharer after sharing is complete. /datum/gas_mixture/proc/temperature_share(...) var/list/args_copy = args.Copy() args_copy.Insert(1, src) return call_ext(AUXMOS, "byond:temperature_share_hook_ffi")(arglist(args_copy)) +/// Arg: (mixture). Makes src into a copy of the argument mixture. /datum/gas_mixture/proc/copy_from(giver) return call_ext(AUXMOS, "byond:copy_from_hook_ffi")(src, giver) +/// Args: (mixture, amount). Takes the given amount of gas from src and puts it into the argument mixture. Amount is amount of substance in moles. /datum/gas_mixture/proc/__remove(into, amount_arg) return call_ext(AUXMOS, "byond:remove_hook_ffi")(src, into, amount_arg) +/// Args: (mixture, ratio). Takes the given ratio of gas from src and puts it into the argument mixture. Ratio is a number between 0 and 1. /datum/gas_mixture/proc/__remove_ratio(into, ratio_arg) return call_ext(AUXMOS, "byond:remove_ratio_hook_ffi")(src, into, ratio_arg) +/// Args: (mixture). Merges the gas from the giver into src, without modifying the giver mix. /datum/gas_mixture/proc/merge(giver) return call_ext(AUXMOS, "byond:merge_hook_ffi")(src, giver) +/// Returns: the mix's thermal energy, the product of the mixture's heat capacity and its temperature. /datum/gas_mixture/proc/thermal_energy() return call_ext(AUXMOS, "byond:thermal_energy_hook_ffi")(src) +/// Returns: the mix's volume, in liters. /datum/gas_mixture/proc/return_volume() return call_ext(AUXMOS, "byond:return_volume_hook_ffi")(src) +/// Returns: the mix's temperature, in kelvins. /datum/gas_mixture/proc/return_temperature() return call_ext(AUXMOS, "byond:return_temperature_hook_ffi")(src) +/// Returns: the mix's pressure, in kilopascals. /datum/gas_mixture/proc/return_pressure() return call_ext(AUXMOS, "byond:return_pressure_hook_ffi")(src) +/// Returns: Amount of substance, in moles. /datum/gas_mixture/proc/total_moles() return call_ext(AUXMOS, "byond:total_moles_hook_ffi")(src) +/// Args: (min_heat_cap). Sets the mix's minimum heat capacity. /datum/gas_mixture/proc/set_min_heat_capacity(arg_min) return call_ext(AUXMOS, "byond:min_heat_cap_hook_ffi")(src, arg_min) +/// Returns: Heat capacity, in J/K (probably). /datum/gas_mixture/proc/heat_capacity() return call_ext(AUXMOS, "byond:heat_cap_hook_ffi")(src) +/// Adds the gas mixture's ID to the queue of mixtures that have been deleted, to be reused later. +/// This version is only if auxcleanup is not being used; it should be called from /datum/gas_mixture/Del. /datum/gas_mixture/proc/__gasmixture_unregister() return call_ext(AUXMOS, "byond:unregister_gasmixture_hook_ffi")(src) +/// Fills in the first unused slot in the gas mixtures vector, or adds another one, then sets the argument ByondValue to point to it. /datum/gas_mixture/proc/__gasmixture_register() return call_ext(AUXMOS, "byond:register_gasmixture_hook_ffi")(src) +/// Args: (ms). Runs callbacks until time limit is reached. If time limit is omitted, runs all callbacks. /proc/process_atmos_callbacks(remaining) return call_ext(AUXMOS, "byond:atmos_callback_handle_ffi")(remaining) +/// Updates adjacency infos for turfs, only use this in immediateupdateturfs. /turf/proc/__update_auxtools_turf_adjacency_info() return call_ext(AUXMOS, "byond:hook_infos_ffi")(src) +/// Returns: null. Updates turf air infos, whether the turf is closed, is space or a regular turf, or even a planet turf is decided here. /turf/proc/update_air_ref(flag) return call_ext(AUXMOS, "byond:hook_register_turf_ffi")(src, flag) +/// Returns: If this cycle is interrupted by overtiming or not. Starts a katmos equalize cycle, does nothing if process_turfs isn't ran. /datum/controller/subsystem/air/proc/process_turf_equalize_auxtools(remaining) return call_ext(AUXMOS, "byond:equalize_hook_ffi")(src, remaining) -/datum/controller/subsystem/air/proc/process_excited_groups_auxtools(remaining) - return call_ext(AUXMOS, "byond:groups_hook_ffi")(src, remaining) - +/// Returns: If this cycle is interrupted by overtiming or not. Starts a processing turfs cycle. /datum/controller/subsystem/air/proc/process_turfs_auxtools(remaining) return call_ext(AUXMOS, "byond:process_turf_hook_ffi")(src, remaining) +/// Returns: If this cycle is interrupted by overtiming or not. Calls all outstanding callbacks created by other processes, usually ones that can't run on other threads and only the main thread. /datum/controller/subsystem/air/proc/finish_turf_processing_auxtools(time_remaining) return call_ext(AUXMOS, "byond:finish_process_turfs_ffi")(time_remaining) +/// Returns: If a processing thread is running or not. /datum/controller/subsystem/air/proc/thread_running() return call_ext(AUXMOS, "byond:thread_running_hook_ffi")() +/// Returns: If this cycle is interrupted by overtiming or not. Starts a processing excited groups cycle, does nothing if process_turfs isn't ran. +/datum/controller/subsystem/air/proc/process_excited_groups_auxtools(remaining) + return call_ext(AUXMOS, "byond:groups_hook_ffi")(src, remaining) + +/// For updating reagent gas fire products, do not use for now. /proc/finalize_gas_refs() return call_ext(AUXMOS, "byond:finalize_gas_refs_ffi")() +/// For updating reaction informations for auxmos, only call this when it is changed. /datum/controller/subsystem/air/proc/auxtools_update_reactions() return call_ext(AUXMOS, "byond:update_reactions_ffi")() +/// Registers gases, and get reaction infos for auxmos, only call when ssair is initing. /proc/auxtools_atmos_init(gas_data) return call_ext(AUXMOS, "byond:hook_init_ffi")(gas_data) +/// For registering gases, do not touch this. /proc/_auxtools_register_gas(gas) return call_ext(AUXMOS, "byond:hook_register_gas_ffi")(gas) + diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index b5026c71247fa..5dacaec1b4cfd 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -420,9 +420,11 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." return if (length(last_whisper)) - living_owner.dying_breath("[last_whisper]") living_owner.say("#[last_whisper]") - living_owner.succumb(whispered = length(last_whisper) > 0) + //Say handles everything else for us + return + + living_owner.succumb(FALSE) //ALIENS diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 2f325a1b23229..e74c04bf6ec5a 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -66,6 +66,8 @@ SUBSYSTEM_DEF(air) var/equalize_hard_turf_limit = 2000 // Whether equalization should be enabled at all. var/equalize_enabled = TRUE + // The ratio of gas "shared" from the immutable planetary atmos mix to planetary tiles + var/planet_share_ratio = 0.25 // Whether turf-to-turf heat exchanging should be enabled. var/heat_enabled = FALSE // Max number of times process_turfs will share in a tick. diff --git a/code/datums/components/bandage.dm b/code/datums/components/bandage.dm index 16f6a2f0b0596..05a31ec4ee321 100644 --- a/code/datums/components/bandage.dm +++ b/code/datums/components/bandage.dm @@ -41,7 +41,7 @@ SIGNAL_HANDLER var/obj/item/bodypart/heal_target = parent - lifespan -= 1 + heal_target.bleeding // particularly nasty bleeding can burn through dressing faster + lifespan-- heal_target.adjust_bleeding(-bleed_reduction) if(lifespan <= 0 || !heal_target.bleeding) //remove treatment once it's no longer able to treat drop_bandage(TRUE) diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index e6733b8d56124..d394d7707be86 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -112,7 +112,7 @@ var/area/A = get_area(connected_holopad) calling_holopad.say("[A] holopad disconnected.") else if(H == calling_holopad && connected_holopad) - connected_holopad.say("[user] disconnected.") + connected_holopad.say("[caller_location] disconnected.") ConnectionFailure(H, TRUE) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 809fba0790bc6..3d4cbb79a6e5e 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -1082,6 +1082,9 @@ DEFINE_BITFIELD(turret_flags, list( shot_delay = 2 scan_range = 6 +/obj/machinery/porta_turret/ship/frontiersmen/assess_perp(mob/living/carbon/human/perp) + return 10 //Syndicate turrets shoot everything not in their faction //this needs to be default behavior and im gonna refactor it soon + /obj/machinery/porta_turret/ship/frontiersmen/light name = "Pounder Turret" desc = "A low caliber SMG with an atrociously high cycle rate, frankensteined together with a targetting assembly." diff --git a/code/game/objects/effects/turf_fire.dm b/code/game/objects/effects/turf_fire.dm index 0bed49a3709c7..46baaf691e87b 100644 --- a/code/game/objects/effects/turf_fire.dm +++ b/code/game/objects/effects/turf_fire.dm @@ -65,11 +65,17 @@ /obj/effect/abstract/turf_fire/Initialize(mapload, power, fire_color) . = ..() - particles = new /particles/smoke/turf_fire var/turf/open/open_turf = loc if(open_turf.turf_fire) return INITIALIZE_HINT_QDEL + var/datum/gas_mixture/environment = open_turf.air + var/oxy = environment.get_moles(GAS_O2) + if (oxy < TURF_FIRE_BURN_MINIMUM_OXYGEN_REQUIRED) + return INITIALIZE_HINT_QDEL + + particles = new /particles/smoke/turf_fire + var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) @@ -100,27 +106,28 @@ var/turf/open/open_turf = loc if(open_turf.planetary_atmos) return TRUE + var/datum/gas_mixture/cached_air = open_turf.air + var/oxy = cached_air.get_moles(GAS_O2) if (oxy < TURF_FIRE_BURN_MINIMUM_OXYGEN_REQUIRED) return FALSE + var/temperature = cached_air.return_temperature() var/old_heat_capacity = cached_air.heat_capacity() + var/burn_rate = TURF_FIRE_BURN_RATE_BASE + fire_power * TURF_FIRE_BURN_RATE_PER_POWER - if(burn_rate > oxy) - burn_rate = oxy + burn_rate = max(oxy, burn_rate) - var/new_o2 = (cached_air.get_moles(GAS_O2) - burn_rate) - cached_air.set_moles(GAS_O2, new_o2) + cached_air.adjust_moles(GAS_O2, -burn_rate) - var/new_co2 = (cached_air.get_moles(GAS_O2) + burn_rate * TURF_FIRE_BURN_CARBON_DIOXIDE_MULTIPLIER) - cached_air.set_moles(GAS_CO2, new_co2) + cached_air.adjust_moles(GAS_CO2, burn_rate * TURF_FIRE_BURN_CARBON_DIOXIDE_MULTIPLIER) var/new_heat_capacity = cached_air.heat_capacity() var/energy_released = burn_rate * TURF_FIRE_ENERGY_PER_BURNED_OXY_MOL cached_air.adjust_heat((temperature * old_heat_capacity + energy_released) / new_heat_capacity) - open_turf.air = cached_air - open_turf.air_update_turf(TRUE) + + open_turf.air_update_turf() return TRUE /obj/effect/abstract/turf_fire/process() diff --git a/code/game/objects/structures/crateshelf.dm b/code/game/objects/structures/crateshelf.dm index a637829bd2c2b..65a20a128829f 100644 --- a/code/game/objects/structures/crateshelf.dm +++ b/code/game/objects/structures/crateshelf.dm @@ -81,7 +81,7 @@ balloon_alert(user, "adding additional shelf to rack") if(do_after(user, 3 SECONDS, src)) add_shelf(1) - our_sheet.add(-2) + our_sheet.use(2) return TRUE to_chat(user, span_notice("Adding a shelf to [src] requires more metal.")) return FALSE @@ -169,8 +169,12 @@ shelf_contents[shelf_contents.Find(crate)] = null if(!(flags_1&NODECONSTRUCT_1)) density = FALSE - var/obj/item/rack_parts/shelf/newparts = new(loc) - transfer_fingerprints_to(newparts) + var/obj/item/rack_parts/shelf/new_parts = new(loc) + if(capacity >= 2) + var/obj/item/stack/sheet/metal/new_metal = new(loc) + new_metal.amount = (capacity-1)*2 + transfer_fingerprints_to(new_metal) + transfer_fingerprints_to(new_parts) return ..() /obj/item/rack_parts/shelf diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 92f6d3b647824..e2c6caa8be7ed 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -155,7 +155,7 @@ baseturfs = /turf/open/indestructible/airblock /turf/open/Initalize_Atmos(times_fired) - if(!istype(air,/datum/gas_mixture/turf)) + if(!istype(air, /datum/gas_mixture)) air = new(2500, src) air.copy_from_turf(src) update_air_ref(planetary_atmos ? AIR_REF_PLANETARY_TURF : AIR_REF_OPEN_TURF) diff --git a/code/game/turfs/open/floor/plating/wasteplanet.dm b/code/game/turfs/open/floor/plating/wasteplanet.dm index 6de774313697b..250ab5f45569d 100644 --- a/code/game/turfs/open/floor/plating/wasteplanet.dm +++ b/code/game/turfs/open/floor/plating/wasteplanet.dm @@ -266,19 +266,62 @@ //closed turfs are a thing /turf/closed/wall/r_wall/wasteplanet + max_integrity = 800 + integrity = 800 baseturfs = /turf/open/floor/plating/wasteplanet +/turf/closed/wall/r_wall/wasteplanet/Initialize(mapload, inherited_virtual_z) + . = ..() + if(prob(25)) + alter_integrity(-rand(200,400)) + + /turf/closed/wall/r_wall/rust/wasteplanet + max_integrity = 600 + integrity = 600 baseturfs = /turf/open/floor/plating/wasteplanet/rust +/turf/closed/wall/r_wall/rust/wasteplanet/Initialize(mapload, inherited_virtual_z) + . = ..() + if(prob(25)) + alter_integrity(-rand(0,400)) + /turf/closed/wall/wasteplanet + max_integrity = 200 + integrity = 200 baseturfs = /turf/open/floor/plating/wasteplanet +/turf/closed/wall/wasteplanet/Initialize(mapload, inherited_virtual_z) + . = ..() + if(prob(25)) + alter_integrity(-rand(0,150)) + /turf/closed/wall/rust/wasteplanet + max_integrity = 100 + integrity = 100 baseturfs = /turf/open/floor/plating/wasteplanet/rust +/turf/closed/wall/rust/wasteplanet/Initialize(mapload, inherited_virtual_z) + . = ..() + if(prob(25)) + alter_integrity(-rand(0,100)) + /turf/closed/wall/concrete/wasteplanet + max_integrity = 200 + integrity = 200 baseturfs = /turf/open/floor/concrete/wasteplanet +/turf/closed/wall/concrete/wasteplanet/Initialize(mapload, inherited_virtual_z) + . = ..() + if(prob(25)) + alter_integrity(-rand(0,100)) + /turf/closed/wall/concrete/reinforced/wasteplanet + max_integrity = 700 + integrity = 700 baseturfs = /turf/open/floor/concrete/wasteplanet + +/turf/closed/wall/concrete/reinforced/wasteplanet/Initialize(mapload, inherited_virtual_z) + . = ..() + if(prob(25)) + alter_integrity(-rand(0,500)) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 8a90ac9fe614b..4da6e25703bb8 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -378,7 +378,7 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) /turf/open/Entered(atom/movable/AM) . =..() //melting - if(isobj(AM) && air && air.return_temperature() > T0C) + if(isobj(AM) && air?.return_temperature() > T0C) var/obj/O = AM if(O.obj_flags & FROZEN) O.make_unfrozen() diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 1162f1d3b6cfc..7368e05f1b440 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -71,7 +71,7 @@ return secured /obj/item/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj) - if (istype(AM, /obj/effect/beam)) + if(istype(AM, /obj/effect/beam) || istype(AM, /obj/projectile) || istype(AM, /obj/effect/projectile)) return sense() diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 18b7b99a7310c..d5c0a9fead1d2 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -20,7 +20,7 @@ var/pressure_direction = 0 var/turf/pressure_specific_target - var/datum/gas_mixture/turf/air + var/datum/gas_mixture/air var/obj/effect/hotspot/active_hotspot var/planetary_atmos = FALSE //air will revert to initial_gas_mix over time @@ -184,14 +184,14 @@ /turf/proc/handle_decompression_floor_rip() /turf/open/floor/handle_decompression_floor_rip(sum) - if(sum > 20 && prob(clamp(sum / 10, 0, 30)) && !blocks_air) + if(!blocks_air && sum > 20 && prob(clamp(sum / 10, 0, 30))) remove_tile() /turf/open/process_cell(fire_count) //////////////////////////SPACEWIND///////////////////////////// -/turf/proc/consider_pressure_difference() +/turf/proc/consider_pressure_difference(turf/T, difference) return /turf/open/consider_pressure_difference(turf/T, difference) diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index fa3ba14457d57..1aff4ddadb7f4 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -210,8 +210,6 @@ get_true_breath_pressure(pp) --> gas_pp = pp/breath_pp*total_moles() 10 = 2.5/5*20 */ -/datum/gas_mixture/turf - /// Releases gas from src to output air. This means that it can not transfer air to gas mixture with higher pressure. /datum/gas_mixture/proc/release_gas_to(datum/gas_mixture/output_air, target_pressure) var/output_starting_pressure = output_air.return_pressure() diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 5ebf45ef1d857..9047120b6afaf 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -30,7 +30,7 @@ /datum/supply_pack/ammo/c9mmap_ammo_box name = "9mm AP Ammo Box Crate" desc = "Contains a 48-round 9mm box loaded with armor piercing ammo." - contains = list(/obj/item/storage/box/ammo/c9mm/ap) + contains = list(/obj/item/storage/box/ammo/c9mm_ap) cost = 400 /datum/supply_pack/ammo/c9mmhp_ammo_box diff --git a/code/modules/cargo/packs/exploration.dm b/code/modules/cargo/packs/exploration.dm index a350fd3231462..3a02f59c9b7a4 100644 --- a/code/modules/cargo/packs/exploration.dm +++ b/code/modules/cargo/packs/exploration.dm @@ -97,3 +97,11 @@ /obj/item/storage/box/flares, /obj/item/storage/box/flares, ) + +/datum/supply_pack/exploration/nvg + name = "Night Vision Goggles" + desc = "Contains a singular pair of Night Vision Goggles, for all your spelunking and military LARP occasions." + cost = 1000 + contains = list( + /obj/item/clothing/glasses/night + ) diff --git a/code/modules/cargo/packs/spacesuit_armor.dm b/code/modules/cargo/packs/spacesuit_armor.dm index ffa24a2dd2bd8..612f530d4137e 100644 --- a/code/modules/cargo/packs/spacesuit_armor.dm +++ b/code/modules/cargo/packs/spacesuit_armor.dm @@ -138,7 +138,7 @@ /datum/supply_pack/spacesuit_armor/marine_armor name = "Tactical Armor Crate" - desc = "One set of well-rounded, tactical body armor. The set includes a helmet and vest." + desc = "One set of well-rounded tactical armor. While it does not protect the limbs, the vest is fairly durable. The set includes a helmet and vest." cost = 1500 contains = list(/obj/item/clothing/suit/armor/vest/marine, /obj/item/clothing/head/helmet/marine) @@ -147,8 +147,8 @@ /datum/supply_pack/spacesuit_armor/medium_marine_armor name = "Medium Tactical Armor Crate" - desc = "One set of well-rounded medium tactical body armor. The set includes a helmet and vest." - cost = 2000 + desc = "One set of well-rounded medium tactical body armor. Plates are attached to the vest and cover the limbs. The set includes a helmet and chestpiece." + cost = 3000 contains = list(/obj/item/clothing/suit/armor/vest/marine/medium, /obj/item/clothing/head/helmet/marine) crate_name = "armor crate" diff --git a/code/modules/cargo/packs/tools.dm b/code/modules/cargo/packs/tools.dm index 0cd01966b245e..830746d96fa4e 100644 --- a/code/modules/cargo/packs/tools.dm +++ b/code/modules/cargo/packs/tools.dm @@ -74,13 +74,6 @@ contains = list(/obj/item/pickaxe/drill/jackhammer) crate_name = "jackhammer crate" -/datum/supply_pack/tools/plasmacutter - name = "Plasmacutter Crate" - desc = "Contains a plasmacutter, capable of rapidly breaking down hull." - cost = 1250 - contains = list(/obj/item/gun/energy/plasmacutter) - crate_name = "plasmacutter crate" - /datum/supply_pack/tools/metalfoam name = "Metal Foam Grenade Crate" desc = "Seal up those pesky hull breaches with 7 metal foam grenades." @@ -112,10 +105,20 @@ /datum/supply_pack/tools/anglegrinder name = "Angle Grinder" desc = "Contains one angle grinder pack, a tool used for quick structure deconstruction and salvaging" - cost = 2000 - contains = list(/obj/item/gear_pack/anglegrinder) + cost = 1500 + contains = list( + /obj/item/gear_pack/anglegrinder, + /obj/item/radio/headset/alt + ) crate_name = "Angle Grinder" +/datum/supply_pack/tools/plasmacutter + name = "Plasmacutter Crate" + desc = "Contains a plasmacutter, capable of rapidly breaking down hull." + cost = 2500 + contains = list(/obj/item/gun/energy/plasmacutter) + crate_name = "plasmacutter crate" + /* Liquid tanks */ diff --git a/code/modules/clothing/factions/hardliners.dm b/code/modules/clothing/factions/hardliners.dm index ffa5a5e459ae7..83c00e64b89ef 100644 --- a/code/modules/clothing/factions/hardliners.dm +++ b/code/modules/clothing/factions/hardliners.dm @@ -126,7 +126,6 @@ icon = 'icons/obj/clothing/faction/hardliners/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi' helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/hl - lightweight = 1 jetpack = null /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/hl @@ -148,7 +147,6 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/hl icon = 'icons/obj/clothing/faction/hardliners/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi' - lightweight = 1 jetpack = null ///////// diff --git a/code/modules/clothing/factions/ngr.dm b/code/modules/clothing/factions/ngr.dm index cdf1f0bdc96f1..366fa3b37cfe8 100644 --- a/code/modules/clothing/factions/ngr.dm +++ b/code/modules/clothing/factions/ngr.dm @@ -138,7 +138,6 @@ icon = 'icons/obj/clothing/faction/ngr/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/ngr/suits.dmi' helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/ngr - lightweight = 1 jetpack = null greyscale_colors = list("#33353a", "#d9ad82", "#8c1a34") diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index f806beca1e023..00e527a3161a4 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -436,7 +436,6 @@ item_state = "hardsuit1-ramzi" hardsuit_type = "ramzi" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/ramzi - lightweight = 1 jetpack = null armor = list("melee" = 35, "bullet" = 25, "laser" = 20,"energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) slowdown = 0.7 diff --git a/code/modules/faction/faction_datum.dm b/code/modules/faction/faction_datum.dm index 017c324f50119..993fee1e37f3a 100644 --- a/code/modules/faction/faction_datum.dm +++ b/code/modules/faction/faction_datum.dm @@ -24,6 +24,10 @@ name = FACTION_CYBERSUN prefixes = PREFIX_CYBERSUN +/datum/faction/syndicate/hardliners + name = FACTION_HARDLINERS + prefixes = PREFIX_HARDLINERS + /datum/faction/syndicate/suns name = FACTION_SUNS short_name = "SUNS" diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index da75efa5265ae..f973a2b7a5905 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -67,6 +67,8 @@ return pick('sound/voice/human/malescream_1.ogg', 'sound/voice/human/malescream_2.ogg', 'sound/voice/human/malescream_3.ogg', 'sound/voice/human/malescream_4.ogg', 'sound/voice/human/malescream_5.ogg', 'sound/voice/human/malescream_6.ogg') else if(ismoth(H)) return 'sound/voice/moth/scream_moth.ogg' + else if(isvox(H)) + return 'sound/voice/vox/vox_scream_1.ogg' else if(islizard(H)) return pick('sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg', 'sound/voice/lizard/lizard_scream_4.ogg') diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 1e40ddf767046..2e0c07be8fd7b 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -57,7 +57,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( "รท" = MODE_VOCALCORDS )) -/mob/living/proc/Ellipsis(original_msg, chance = 50, keep_words) +/mob/living/proc/ellipsis(original_msg, chance = 50, keep_words) if(chance <= 0) return "..." if(chance >= 100) @@ -79,7 +79,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return new_msg -/mob/living/say(message, bubble_type,list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) +/mob/living/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) var/ic_blocked = FALSE if(client && !forced && CHAT_FILTER_CHECK(message)) //The filter doesn't act on the sanitized message, but the raw message. @@ -112,8 +112,13 @@ GLOBAL_LIST_INIT(department_radio_keys, list( client?.dsay(message) return - // dead is the only state you can never emote - if(stat != DEAD && check_emote(original_message, forced)) + var/succumbed = FALSE + + if(stat == DEAD) + say_dead(original_message) + return + + if(check_emote(original_message, forced)) return switch(stat) @@ -123,11 +128,19 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(!(message_mods[MODE_CHANGELING] || message_mods[MODE_ALIEN])) return if(HARD_CRIT) - if(!(message_mods[WHISPER_MODE] || message_mods[MODE_CHANGELING] || message_mods[MODE_ALIEN])) + if(!(message_mods[MODE_CHANGELING] || message_mods[MODE_ALIEN])) + // If we cut our message short, abruptly end it with a-.. + var/message_len = length_char(message) + var/health_diff = round(-HEALTH_THRESHOLD_DEAD + health) + message = copytext_char(message, 1, health_diff) + (message_len > health_diff ? "-.." : "...") + message = ellipsis(message, 10, 1) + + //If the player didn't voluntarily whisper, we'll ask them to confirm their dying words + if(!message_mods[WHISPER_MODE] && (tgui_alert(src, "Your dying words will be \"[message]\", continue?", "Succumb", list("Cancel", "Continue"), 15 SECONDS) != "Continue")) + return + message_mods[WHISPER_MODE] = MODE_WHISPER_CRIT - if(DEAD) - say_dead(original_message) - return + succumbed = TRUE if(client && SSlag_switch.measures[SLOWMODE_SAY] && !HAS_TRAIT(src, TRAIT_BYPASS_MEASURES) && !forced && src == usr) if(!COOLDOWN_FINISHED(client, say_slowmode)) @@ -149,33 +162,20 @@ GLOBAL_LIST_INIT(department_radio_keys, list( var/message_range = 7 - var/succumbed = FALSE - if(message_mods[MODE_CUSTOM_SAY_EMOTE]) log_message(message_mods[MODE_CUSTOM_SAY_EMOTE], LOG_RADIO_EMOTE) if(!message_mods[MODE_CUSTOM_SAY_ERASE_INPUT]) - if(message_mods[WHISPER_MODE]) + //Final words (MODE_WHISPER_CRIT) are already obfuscated, let them have full range + if(message_mods[WHISPER_MODE] == MODE_WHISPER) if(saymode || message_mods[RADIO_EXTENSION]) //no radio while in crit saymode = null message_mods -= RADIO_EXTENSION message_range = 1 var/logged_message = message - if(stat == HARD_CRIT) //This is cheaper than checking for MODE_WHISPER_CRIT message mod - var/health_diff = round(-HEALTH_THRESHOLD_DEAD + health) - // If we cut our message short, abruptly end it with a-.. - var/message_len = length_char(message) - message = copytext_char(message, 1, health_diff) + "[message_len > health_diff ? "-.." : "..."]" - message = Ellipsis(message, 10, 1) - last_words = message - var/final_warning = alert(usr, "Your dying words will be \"[last_words]\", continue?", "Succumb", "Cancel", "Continue") - if(final_warning == "Cancel" || QDELETED(src)) - return - message_mods[WHISPER_MODE] = MODE_WHISPER_CRIT - succumbed = TRUE - src.log_talk(logged_message, LOG_WHISPER, custom_say_emote = message_mods[MODE_CUSTOM_SAY_EMOTE]) + src.log_talk(logged_message, LOG_WHISPER, forced_by = forced, custom_say_emote = message_mods[MODE_CUSTOM_SAY_EMOTE]) else - src.log_talk(message, LOG_SAY, forced_by=forced, custom_say_emote = message_mods[MODE_CUSTOM_SAY_EMOTE]) + src.log_talk(message, LOG_SAY, forced_by = forced, custom_say_emote = message_mods[MODE_CUSTOM_SAY_EMOTE]) message = treat_message(message) // unfortunately we still need this var/sigreturn = SEND_SIGNAL(src, COMSIG_MOB_SAY, args) @@ -226,9 +226,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list( send_speech(message, message_range, src, bubble_type, spans, language, message_mods) if(succumbed) - succumb(1) + succumb(TRUE) to_chat(src, compose_message(src, language, message, , spans, message_mods)) - dying_breath(message) return 1 @@ -249,6 +248,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list( // Create map text prior to modifying message for goonchat if (client?.prefs.chat_on_map && !(stat == UNCONSCIOUS || stat == HARD_CRIT) && (client.prefs.see_chat_non_mob || ismob(speaker)) && can_hear()) + if(message_mods[MODE_WHISPER] == MODE_WHISPER_CRIT) + play_screen_text("message") if(message_mods[MODE_CUSTOM_SAY_ERASE_INPUT]) create_chat_message(speaker, null, message_mods[MODE_CUSTOM_SAY_EMOTE], spans, EMOTE_MESSAGE) else @@ -419,8 +420,3 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(get_minds && mind) return mind.get_language_holder() . = ..() - -/mob/living/proc/dying_breath(message) - for(var/mob/M in get_hearers_in_view(7, src)) - if(M.can_hear()) - M.play_screen_text("[message]") diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index 90fdeb79af9c3..c0b137ca23006 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -34,6 +34,9 @@ /obj/item/paper, /obj/item/photo, /obj/item/holochip, + /obj/item/folder/biscuit, + /obj/item/spacecash, + /obj/item/documents, ) /// List of types which should be allowed to be faxed if hacked var/static/list/exotic_types = list( @@ -47,9 +50,7 @@ /obj/item/reagent_containers/food/snacks/raisincookie, /obj/item/reagent_containers/food/snacks/pancakes, /obj/item/throwing_star, - /obj/item/spacecash, /obj/item/card, - /obj/item/folder/biscuit ) /// Internal radio for announcing over comms var/obj/item/radio/radio diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm index 68ae4e2236ba4..10c944b98d93a 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_pistol_stacks.dm @@ -115,18 +115,18 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/surplus = 48) generate_items_inside(items_inside,src) -/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_ap +/obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap ammo_type = /obj/item/ammo_casing/c9mm/ap -/obj/item/storage/box/ammo/c9mm/ap +/obj/item/storage/box/ammo/c9mm_ap name = "box of AP 9mm ammo" desc = "A box of 9mm armor-piercing ammo, designed to penetrate through armor at the cost of total damage." icon_state = "9mmbox-ap" -/obj/item/storage/box/ammo/c9mm/ap/PopulateContents() +/obj/item/storage/box/ammo/c9mm_ap/PopulateContents() ..() var/static/items_inside = list( - /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm_ap = 4) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/ap = 4) generate_items_inside(items_inside,src) /obj/item/ammo_box/magazine/ammo_stack/prefilled/c9mm/hp diff --git a/code/modules/projectiles/guns/manufacturer/serene_sporting/ballistics.dm b/code/modules/projectiles/guns/manufacturer/serene_sporting/ballistics.dm index ab997c044d013..13820fea264df 100644 --- a/code/modules/projectiles/guns/manufacturer/serene_sporting/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/serene_sporting/ballistics.dm @@ -169,6 +169,8 @@ EMPTY_GUN_HELPER(automatic/m12_sporter/mod) bolt_type = BOLT_TYPE_LOCKING + slot_flags = ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY weapon_weight = WEAPON_MEDIUM diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index a07f9d96dd803..10d19097df569 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -388,7 +388,7 @@ id = "ap9mm" build_type = PROTOLATHE materials = list(/datum/material/iron = 15000, /datum/material/uranium = 1000) - build_path = /obj/item/storage/box/ammo/c9mm/ap + build_path = /obj/item/storage/box/ammo/c9mm_ap category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY diff --git a/dependencies.sh b/dependencies.sh index 6f5a61810a819..82e8880626868 100755 --- a/dependencies.sh +++ b/dependencies.sh @@ -24,7 +24,7 @@ export SPACEMAN_DMM_VERSION=suite-1.8 export PYTHON_VERSION=3.9.0 #auxmos repository -export AUXMOS_REPO=https://github.com/Putnam3145/auxmos +export AUXMOS_REPO=https://github.com/shiptest-ss13/auxmos #auxmos version -export AUXMOS_VERSION=v2.5.1 +export AUXMOS_VERSION=v2.5.5.1 diff --git a/html/changelogs/AutoChangeLog-pr-3711.yml b/html/changelogs/AutoChangeLog-pr-3711.yml new file mode 100644 index 0000000000000..142a4c3d03ddc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3711.yml @@ -0,0 +1,6 @@ +author: MarkSuckerberg +changes: + - {tweak: 'Whispering (as in, directly using the verb or typing `#` before your + message) will now skip the succumb confirmation prompt, while normal talking + will still continue to prompt if you want to succumb.'} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3717.yml b/html/changelogs/AutoChangeLog-pr-3717.yml new file mode 100644 index 0000000000000..c684df41e3612 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3717.yml @@ -0,0 +1,4 @@ +author: generalthrax +changes: + - {bugfix: You can no longer see through Marauder hardsuits} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3748.yml b/html/changelogs/AutoChangeLog-pr-3748.yml new file mode 100644 index 0000000000000..df756af885bff --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3748.yml @@ -0,0 +1,5 @@ +author: Erikafox +changes: + - {rscadd: walls on wasteworlds now have a chance to start damaged} + - {balance: walls on waste worlds are now universally weaker} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3756.yml b/html/changelogs/AutoChangeLog-pr-3756.yml new file mode 100644 index 0000000000000..8f50d6d15799e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3756.yml @@ -0,0 +1,5 @@ +author: Erikafox +changes: + - {rscadd: fax secret documents} + - {rscadd: and space cash and biscuit folders. without} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3778.yml b/html/changelogs/AutoChangeLog-pr-3778.yml new file mode 100644 index 0000000000000..f7b17d97c3b62 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3778.yml @@ -0,0 +1,4 @@ +author: firebudgy +changes: + - {rscadd: Enabled thee screaming audio emote for Vox.} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3794.yml b/html/changelogs/AutoChangeLog-pr-3794.yml new file mode 100644 index 0000000000000..4b285cc0f8410 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3794.yml @@ -0,0 +1,4 @@ +author: fighterslam +changes: + - {bugfix: fixes access on the ranger armory} +delete-after: true diff --git a/html/changelogs/archive/2024-11.yml b/html/changelogs/archive/2024-11.yml index a2a0bea0329a1..5921ea671719f 100644 --- a/html/changelogs/archive/2024-11.yml +++ b/html/changelogs/archive/2024-11.yml @@ -204,3 +204,18 @@ - rscadd: Four new hats for your blorbo customization! Find them in loadout. Sponsored by Miskilamo Shipbreaking. - bugfix: Vox Frontiersmen Officers finally stitched up their clothing. +2024-11-20: + Erikafox: + - balance: frontiersmen turrets kill everything not in their faction + - balance: medium marine armor now costs 3k at da outpost. + - bugfix: crate shelves now return all metal + - bugfix: crate shelves no longer lead to 0 metal stacks + - bugfix: Cthonian Platforms now have proper dirs + Sadhorizon: + - code_imp: Added a Hardliner faction datum. + SomeguyManperson: + - bugfix: 9mm AP boxes now work right + generalthrax: + - balance: Replaced rubbershot on the Kilo and Scarab with buckshot + - rscadd: Added a soft suit to the Listening Post + - bugfix: Fixed the Listening Post Comms Monitor to be the right type diff --git a/tgui/yarn.lock b/tgui/yarn.lock index 0bbf5add1c915..eaeb92321e550 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -3661,13 +3661,13 @@ __metadata: linkType: hard "cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b languageName: node linkType: hard diff --git a/tools/ci/build_auxmos.sh b/tools/ci/build_auxmos.sh index 735b7263761a1..061a5dfa6d154 100644 --- a/tools/ci/build_auxmos.sh +++ b/tools/ci/build_auxmos.sh @@ -9,7 +9,7 @@ pushd "$HOME/auxmos" if [ ! -d .git ] then git init - git remote add origin https://github.com/Putnam3145/auxmos.git + git remote add origin $AUXMOS_REPO fi git fetch origin --depth=1 $AUXMOS_VERSION @@ -17,7 +17,7 @@ git reset --hard FETCH_HEAD rustup target add i686-unknown-linux-gnu -env PKG_CONFIG_ALLOW_CROSS=1 cargo build --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks,katmos" +env PKG_CONFIG_ALLOW_CROSS=1 cargo build --release --target=i686-unknown-linux-gnu --features "citadel_reactions,katmos" mkdir -p ~/.byond/bin cp target/i686-unknown-linux-gnu/release/libauxmos.so ~/.byond/bin/libauxmos.so diff --git a/tools/tgs_scripts/PreCompile.sh b/tools/tgs_scripts/PreCompile.sh index eb45c8bf362be..1003a251e1249 100755 --- a/tools/tgs_scripts/PreCompile.sh +++ b/tools/tgs_scripts/PreCompile.sh @@ -53,7 +53,7 @@ cd .. echo "Deploying auxmos..." cd auxmos git checkout "$AUXMOS_VERSION" -env PKG_CONFIG_ALLOW_CROSS=1 RUSTFLAGS="-C target-cpu=native" ~/.cargo/bin/cargo build --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks,katmos" +env PKG_CONFIG_ALLOW_CROSS=1 RUSTFLAGS="-C target-cpu=native" ~/.cargo/bin/cargo build --release --target=i686-unknown-linux-gnu --features "citadel_reactions,katmos" mv target/i686-unknown-linux-gnu/release/libauxmos.so "$1/libauxmos.so" cd ..