diff --git a/_build_dependencies.sh b/_build_dependencies.sh index 7e4a8ce153ec..b481c560f49e 100644 --- a/_build_dependencies.sh +++ b/_build_dependencies.sh @@ -6,11 +6,11 @@ export NODE_VERSION=20 # Stable Byond Major export STABLE_BYOND_MAJOR=515 # Stable Byond Minor -export STABLE_BYOND_MINOR=1620 +export STABLE_BYOND_MINOR=1628 # Beta Byond Major export BETA_BYOND_MAJOR=515 # Beta Byond Minor -export BETA_BYOND_MINOR=1620 +export BETA_BYOND_MINOR=1628 # Python version for mapmerge and other tools export PYTHON_VERSION=3.11.6 # RUSTG version diff --git a/_maps/map_files220/MetaStation/MetaStation.dmm b/_maps/map_files220/MetaStation/MetaStation.dmm index 4582c1cb5528..a302bd40984b 100644 --- a/_maps/map_files220/MetaStation/MetaStation.dmm +++ b/_maps/map_files220/MetaStation/MetaStation.dmm @@ -31463,7 +31463,7 @@ "cgH" = ( /obj/machinery/light/directional/north, /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -40123,7 +40123,7 @@ "cMx" = ( /obj/machinery/light/directional/north, /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ diff --git a/_maps/map_files220/cyberiad/cyberiad.dmm b/_maps/map_files220/cyberiad/cyberiad.dmm index 2df406d1bbd5..aac6a1494f79 100644 --- a/_maps/map_files220/cyberiad/cyberiad.dmm +++ b/_maps/map_files220/cyberiad/cyberiad.dmm @@ -31381,7 +31381,7 @@ /area/station/medical/morgue) "cvU" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -58059,7 +58059,7 @@ /area/station/maintenance/port) "ieC" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -61771,7 +61771,7 @@ /area/station/maintenance/aft) "jBJ" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -90288,7 +90288,7 @@ /area/station/security/permabrig) "tXI" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ diff --git a/_maps/map_files220/delta/delta.dmm b/_maps/map_files220/delta/delta.dmm index 0392321909a9..c54c91d2386c 100644 --- a/_maps/map_files220/delta/delta.dmm +++ b/_maps/map_files220/delta/delta.dmm @@ -51122,8 +51122,8 @@ /area/station/hallway/secondary/entry) "eQP" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ - pixel_y = 6 +/obj/item/storage/surgical_tray{ + pixel_y = 8 }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" @@ -53347,8 +53347,8 @@ /area/station/maintenance/starboard) "fDY" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ - pixel_y = 6 +/obj/item/storage/surgical_tray{ + pixel_y = 8 }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" @@ -66351,8 +66351,8 @@ /area/station/service/theatre) "jHK" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ - pixel_y = 6 +/obj/item/storage/surgical_tray{ + pixel_y = 8 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -104058,8 +104058,8 @@ /area/station/hallway/secondary/bridge) "vCt" = ( /obj/structure/table/tray, -/obj/item/storage/firstaid/surgery{ - pixel_y = 6 +/obj/item/storage/surgical_tray{ + pixel_y = 8 }, /turf/simulated/floor/plasteel{ dir = 1; diff --git a/_maps/map_files220/generic/centcomm.dmm b/_maps/map_files220/generic/centcomm.dmm index b5777d63a4bd..c8221c5c6e1d 100644 --- a/_maps/map_files220/generic/centcomm.dmm +++ b/_maps/map_files220/generic/centcomm.dmm @@ -12880,7 +12880,7 @@ /area/syndicate_mothership) "ize" = ( /obj/structure/table, -/obj/item/storage/firstaid/surgery{ +/obj/item/storage/surgical_tray{ pixel_y = 6 }, /obj/item/clothing/gloves/color/latex/nitrile, diff --git a/code/modules/food_and_drinks/food_base.dm b/code/modules/food_and_drinks/food_base.dm index d3c8247c6cc3..64facc6b031f 100644 --- a/code/modules/food_and_drinks/food_base.dm +++ b/code/modules/food_and_drinks/food_base.dm @@ -5,6 +5,7 @@ /obj/item/food resistance_flags = FLAMMABLE container_type = INJECTABLE + w_class = WEIGHT_CLASS_TINY var/filling_color = "#FFFFFF" //Used by sandwiches. var/junkiness = 0 //for junk food. used to lower human satiety. var/bitesize = 2 diff --git a/modular_ss220/balance/_balance.dme b/modular_ss220/balance/_balance.dme index 2d9559a712cb..2e1375cb0af3 100644 --- a/modular_ss220/balance/_balance.dme +++ b/modular_ss220/balance/_balance.dme @@ -2,6 +2,7 @@ #include "code/items/projectiles.dm" #include "code/items/weapons.dm" +#include "code/items/storage/surgical_tray.dm" #include "code/jobs/warden.dm" #include "code/mobs/aliens/larva.dm" #include "code/species/machine.dm" diff --git a/modular_ss220/balance/code/items/storage/surgical_tray.dm b/modular_ss220/balance/code/items/storage/surgical_tray.dm new file mode 100644 index 000000000000..c3c65d4b0692 --- /dev/null +++ b/modular_ss220/balance/code/items/storage/surgical_tray.dm @@ -0,0 +1,14 @@ +/obj/item/storage/surgical_tray/Initialize(mapload) + . = ..() + + QDEL_LIST_CONTENTS(contents) + + new /obj/item/scalpel(src) + new /obj/item/cautery(src) + new /obj/item/hemostat(src) + new /obj/item/retractor(src) + new /obj/item/FixOVein(src) + new /obj/item/surgicaldrill(src) + new /obj/item/circular_saw(src) + new /obj/item/bonegel(src) + new /obj/item/bonesetter(src) diff --git a/modular_ss220/objects/_objects.dme b/modular_ss220/objects/_objects.dme index 697afd755731..56083ab10a68 100644 --- a/modular_ss220/objects/_objects.dme +++ b/modular_ss220/objects/_objects.dme @@ -1,5 +1,9 @@ #include "_objects.dm" +// Mechs +#include "code/mecha/lockermech.dm" + +// Miscellaneous #include "code/beach_umbrella.dm" #include "code/beretta.dm" #include "code/big_bed.dm" diff --git a/modular_ss220/objects/code/mecha/lockermech.dm b/modular_ss220/objects/code/mecha/lockermech.dm new file mode 100644 index 000000000000..0f4dfe8be19e --- /dev/null +++ b/modular_ss220/objects/code/mecha/lockermech.dm @@ -0,0 +1,176 @@ +// Makeshift (Lockermech) +/obj/mecha/lockermech + name = "Шкафомех" + desc = "Шкафчик с украденными проводами, стойками, электроникой и шлюзовыми сервоприводами, грубо собранными в нечто, напоминающее мех." + icon = 'modular_ss220/objects/icons/mech.dmi' + icon_state = "lockermech" + initial_icon = "lockermech" + // It's made of scraps + max_integrity = 100 + lights_power = 5 + // Same speed as Ripley + step_in = 4 + armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, rad = 0, fire = 70, acid = 60) + internal_damage_threshold = 30 + max_equip = 2 + wreckage = /obj/structure/mecha_wreckage/lockermech + /// step_in while in normal pressure conditions + var/fast_pressure_step_in = 2 + /// step_in while in better pressure conditions + var/slow_pressure_step_in = 4 + var/list/cargo + /// You can fit a few things in this locker but not much. + var/cargo_capacity = 5 + +/obj/mecha/lockermech/go_out() + ..() + update_icon(UPDATE_OVERLAYS) + +/obj/mecha/lockermech/moved_inside(mob/living/carbon/human/H) + ..() + update_icon(UPDATE_OVERLAYS) + +/obj/mecha/lockermech/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user) + ..() + update_icon(UPDATE_OVERLAYS) + +/obj/mecha/lockermech/Move() + . = ..() + update_pressure() + +/obj/mecha/lockermech/proc/update_pressure() + if(thrusters_active) + return // Don't calculate this if they have thrusters on, this is calculated right after domove because of course it is + + var/turf/target_turf = get_turf(loc) + + if(lavaland_equipment_pressure_check(target_turf)) + step_in = fast_pressure_step_in + for(var/obj/item/mecha_parts/mecha_equipment/drill/lockermech/drill in equipment) + drill.equip_cooldown = initial(drill.equip_cooldown)/2 + else + step_in = slow_pressure_step_in + for(var/obj/item/mecha_parts/mecha_equipment/drill/lockermech/drill in equipment) + drill.equip_cooldown = initial(drill.equip_cooldown) + +/obj/mecha/lockermech/Exit(atom/movable/object) + LAZYINITLIST(cargo) + if(object in cargo) + return FALSE + return ..() + +/obj/mecha/lockermech/get_stats_part() + LAZYINITLIST(cargo) + var/output = ..() + output += "Cargo Compartment Contents:
" + if(length(cargo)) + for(var/obj/cargo_item as anything in cargo) + output += "Unload : [cargo_item]
" + else + output += "Nothing" + output += "
" + return output + +/obj/mecha/lockermech/Topic(href, href_list) + . = ..() + LAZYINITLIST(cargo) + if(!href_list["drop_from_cargo"]) + return + + var/obj/cargo_to_unload = locateUID(href_list["drop_from_cargo"]) + if(!cargo_to_unload || !(cargo_to_unload in cargo)) + return + + occupant_message("You unload [cargo_to_unload].") + cargo_to_unload.forceMove(get_turf(src)) + cargo -= cargo_to_unload + log_message("Unloaded [cargo_to_unload]. Cargo compartment capacity: [cargo_capacity - length(cargo)]") + +/obj/mecha/lockermech/Destroy() + LAZYINITLIST(cargo) + for(var/atom/movable/thing in cargo) + thing.forceMove(loc) + step_rand(thing) + cargo.Cut() + return ..() + +/obj/mecha/lockermech/ex_act(severity) + . = ..() + LAZYINITLIST(cargo) + for(var/thing in cargo) + var/obj/object = thing + if(prob(30 / severity)) + cargo -= object + object.forceMove(drop_location()) + +/obj/mecha/lockermech/emag_act(mob/user) + if(!emagged) + emagged = TRUE + desc += "
The mech's equipment slots spark dangerously!" + return ..() + +// Crafting +/datum/crafting_recipe/lockermech + name = "Locker Mech" + result = list(/obj/mecha/lockermech) + reqs = list(/obj/item/stack/cable_coil = 20, + /obj/item/stack/sheet/metal = 10, + /obj/item/storage/toolbox = 2, // For feet + /obj/item/tank/internals/oxygen = 1, // For air + /obj/item/airlock_electronics = 1, // You are stealing the motors from airlocks + /obj/item/extinguisher = 1, // For bastard pnumatics + /obj/item/c_tube = 1, // To make it airtight + /obj/item/flashlight = 1, // For the mech light + /obj/item/stack/tape_roll = 25, // ¯\_(ツ)_/¯ + /obj/item/stock_parts/cell/high = 1, + /obj/item/stack/rods = 4) // To mount the equipment + tools = list(TOOL_WELDER, TOOL_SCREWDRIVER) + time = 200 + category = CAT_ROBOT + +/datum/crafting_recipe/lockermech_drill + name = "Locker Mech Exosuit Drill" + result = list(/obj/item/mecha_parts/mecha_equipment/drill/lockermech) + reqs = list(/obj/item/stack/cable_coil = 5, + /obj/item/stack/sheet/metal = 2, + /obj/item/surgicaldrill = 1) + tools = list(TOOL_SCREWDRIVER) + time = 50 + category = CAT_ROBOT + +/datum/crafting_recipe/lockermech_clamp + name = "Locker Mech Exosuit Clamp" + result = list(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech) + reqs = list(/obj/item/stack/cable_coil = 5, + /obj/item/stack/sheet/metal = 2, + /obj/item/wirecutters = 1) // Don't ask, its just for the grabby grabby thing + tools = list(TOOL_SCREWDRIVER) + time = 50 + category = CAT_ROBOT + +// Wreckage +/obj/structure/mecha_wreckage/lockermech + name = "\improper Обломки Шкафомеха" + desc = "Владелец данного изделия, на что он надеялся?..." + icon = 'modular_ss220/objects/icons/mech.dmi' + icon_state = "lockermech-broken" + +// Equipment +/obj/item/mecha_parts/mecha_equipment/drill/lockermech + name = "locker mech exosuit drill" + desc = "Собранная из, скорее всего, краденых деталей, эта дрель не сравнится по эффективности с настоящей." + equip_cooldown = 60 // Its slow as shit + force = 10 // Its not very strong + drill_delay = 15 + +/obj/item/mecha_parts/mecha_equipment/drill/lockermech/can_attach(obj/mecha/M) + return istype(M, /obj/mecha/lockermech) && M.equipment.len < M.max_equip + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech + name = "locker mech clamp" + desc = "Беспорядочное расположение собранных вместе деталей, напоминающее зажим." + equip_cooldown = 25 + dam_force = 10 + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech/can_attach(obj/mecha/M) + return istype(M, /obj/mecha/lockermech) && M.equipment.len < M.max_equip diff --git a/modular_ss220/objects/icons/mech.dmi b/modular_ss220/objects/icons/mech.dmi new file mode 100644 index 000000000000..0bf1578d0628 Binary files /dev/null and b/modular_ss220/objects/icons/mech.dmi differ diff --git a/tools/UpdatePaths/Scripts/23063_patch_pill.txt b/tools/UpdatePaths/Scripts/23063_patch_pill.txt index 4141e9657ea1..d7f429b95e12 100644 --- a/tools/UpdatePaths/Scripts/23063_patch_pill.txt +++ b/tools/UpdatePaths/Scripts/23063_patch_pill.txt @@ -1,2 +1,2 @@ -/obj/item/reagent_containers/food/pill/patch : /obj/item/reagent_containers/patch/@SUBTYPES{OLD} -/obj/item/reagent_containers/food/pill : /obj/item/reagent_containers/pill/@SUBTYPES{OLD} +/obj/item/reagent_containers/food/pill/patch : /obj/item/reagent_containers/patch/@SUBTYPES{@OLD} +/obj/item/reagent_containers/food/pill : /obj/item/reagent_containers/pill/@SUBTYPES{@OLD} diff --git a/tools/UpdatePaths/Scripts/23379_food_containers.txt b/tools/UpdatePaths/Scripts/23379_food_containers.txt index f5cde328911d..3cf78ba948e6 100644 --- a/tools/UpdatePaths/Scripts/23379_food_containers.txt +++ b/tools/UpdatePaths/Scripts/23379_food_containers.txt @@ -1,2 +1,2 @@ -/obj/item/reagent_containers/food/drinks/@SUBTYPES : /obj/item/reagent_containers/drinks/@SUBTYPES{OLD} -/obj/item/reagent_containers/food/@SUBTYPES : /obj/item/food/@SUBTYPES{OLD} +/obj/item/reagent_containers/food/drinks/@SUBTYPES : /obj/item/reagent_containers/drinks/@SUBTYPES{@OLD} +/obj/item/reagent_containers/food/@SUBTYPES : /obj/item/food/@SUBTYPES{@OLD} diff --git a/tools/requirements.txt b/tools/requirements.txt index 0c0b75cd37bf..bd5e92d7d756 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1,6 +1,6 @@ pygit2==1.13.1 bidict==0.22.1 -Pillow==10.0.1 +Pillow==10.2.0 json5==0.9.14 # changelogs