diff --git a/_maps/map_files/EchoStation/EchoStation.dmm b/_maps/map_files/EchoStation/EchoStation.dmm index 4292c9f24c248..7d918b94e284b 100644 --- a/_maps/map_files/EchoStation/EchoStation.dmm +++ b/_maps/map_files/EchoStation/EchoStation.dmm @@ -11884,11 +11884,11 @@ dir = 8 }, /obj/effect/turf_decal/siding/white, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, /obj/machinery/vending/coffee, /obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/iron, /area/medical/medbay/central) "fLS" = ( @@ -18694,10 +18694,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 }, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 8; - name = "Medbay"; - sortType = 10 +/obj/structure/disposalpipe/sorting/mail/destination/cmo_office/flip{ + dir = 8 }, /turf/open/floor/iron, /area/medical/medbay/central) @@ -21352,8 +21350,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/sorting/mail/destination/medbay/flip{ + dir = 8 }, /turf/open/floor/catwalk_floor/iron_dark, /area/medical/medbay/central) @@ -29135,10 +29133,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 8; - name = "Medbay"; - sortType = 9 +/obj/structure/disposalpipe/junction/flip{ + dir = 8 }, /turf/open/floor/catwalk_floor/iron_dark, /area/medical/medbay/central) @@ -46993,7 +46989,7 @@ /obj/machinery/disposal/bin, /obj/effect/turf_decal/bot, /obj/structure/disposalpipe/trunk{ - dir = 8 + dir = 1 }, /turf/open/floor/iron, /area/medical/medbay/central) diff --git a/code/_globalvars/turf.dm b/code/_globalvars/turf.dm index ab277cbd05521..f8eeecf61d891 100644 --- a/code/_globalvars/turf.dm +++ b/code/_globalvars/turf.dm @@ -14,6 +14,7 @@ GLOBAL_LIST_INIT(turf_texture_hallway, list(/datum/turf_texture/hallway)) GLOBAL_LIST_INIT(turf_texture_maint, list(/datum/turf_texture/maint, /datum/turf_texture/hallway, /datum/turf_texture/maint/tile)) GLOBAL_LIST_INIT(turf_texture_iron, list(/datum/turf_texture/hallway, /datum/turf_texture/maint/tile)) +GLOBAL_LIST_INIT(turf_texture_iron_nonsegmented, list(/datum/turf_texture/hallway_nonsegmented)) GLOBAL_LIST_INIT(turf_texture_plating, list(/datum/turf_texture/maint)) /* diff --git a/code/datums/components/crafting/crafting_lists/misc.dm b/code/datums/components/crafting/crafting_lists/misc.dm index 1fde5d3a2cbbe..747f3c9b05f15 100644 --- a/code/datums/components/crafting/crafting_lists/misc.dm +++ b/code/datums/components/crafting/crafting_lists/misc.dm @@ -12,6 +12,26 @@ parts = list(/obj/item/camera = 1) category = CAT_MISC +/datum/crafting_recipe/barbell + name = "Barbell" + result = /obj/item/barbell + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/iron = 4, + /obj/item/stack/rods = 2, + ) + category = CAT_MISC + +/datum/crafting_recipe/chestpress + name = "Chest press handle" + result = /obj/item/barbell/stacklifting + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/iron = 4, + /obj/item/stack/rods = 2, + ) + category = CAT_MISC + /datum/crafting_recipe/lizardhat name = "Lizard Cloche Hat" result = /obj/item/clothing/head/costume/lizard diff --git a/code/datums/components/crafting/crafting_lists/structures.dm b/code/datums/components/crafting/crafting_lists/structures.dm index d9d38f67d0ab7..835719293a27b 100644 --- a/code/datums/components/crafting/crafting_lists/structures.dm +++ b/code/datums/components/crafting/crafting_lists/structures.dm @@ -120,3 +120,40 @@ category = CAT_STRUCTURE one_per_turf = TRUE +/datum/crafting_recipe/weightmachine + name = "Chest press machine" + result = /obj/structure/weightmachine + time = 6 SECONDS + reqs = list( + /obj/item/stack/sheet/iron = 2, + /obj/item/stack/rods = 6, + /obj/item/barbell/stacklifting = 1, + ) + tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH) + category = CAT_STRUCTURE + one_per_turf = TRUE + +/datum/crafting_recipe/weightmachine/weightlifter + name = "Inline bench press" + result = /obj/structure/weightmachine/weightlifter + time = 6 SECONDS + reqs = list( + /obj/item/stack/sheet/iron = 2, + /obj/item/stack/rods = 6, + /obj/item/barbell = 1, + ) + tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH) + category = CAT_STRUCTURE + one_per_turf = TRUE + +/datum/crafting_recipe/punching_bag + name = "Punching bag" + result = /obj/structure/punching_bag + time = 6 SECONDS + reqs = list( + /obj/item/stack/sheet/cotton/cloth = 10, + ) + tools = list(TOOL_WIRECUTTER) + category = CAT_STRUCTURE + one_per_turf = TRUE + diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index 64eb92ee3969c..39db3eb4bdb85 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -178,7 +178,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station color_correction = /datum/client_colour/area_color/cold_ish camera_networks = list(CAMERA_NETWORK_STATION) -/area/maintenance/get_turf_textures() +/area/maintenance/get_area_textures() return GLOB.turf_texture_maint //Maintenance - Departmental @@ -242,7 +242,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Science Maintenance" icon_state = "maint_sci" -/area/maintenance/department/science/get_turf_textures() +/area/maintenance/department/science/get_area_textures() return GLOB.turf_texture_hallway /area/maintenance/department/science/central @@ -420,7 +420,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station lighting_brightness_tube = 8 camera_networks = list(CAMERA_NETWORK_STATION) -/area/hallway/get_turf_textures() +/area/hallway/get_area_textures() return GLOB.turf_texture_hallway /area/hallway/primary @@ -642,7 +642,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station color_correction = /datum/client_colour/area_color/warm_ish camera_networks = list(CAMERA_NETWORK_STATION) -/area/crew_quarters/get_turf_textures() +/area/crew_quarters/get_area_textures() return GLOB.turf_texture_hallway /area/crew_quarters/dorms @@ -892,7 +892,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Engineering" icon_state = "engine" -/area/engine/engineering/get_turf_textures() +/area/engine/engineering/get_area_textures() return GLOB.turf_texture_hallway /area/engineering/hallway @@ -1216,7 +1216,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station color_correction = /datum/client_colour/area_color/warm_ish camera_networks = list(CAMERA_NETWORK_STATION) -/area/security/get_turf_textures() +/area/security/get_area_textures() return GLOB.turf_texture_hallway /area/security/main @@ -1389,7 +1389,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station color_correction = /datum/client_colour/area_color/warm_yellow camera_networks = list(CAMERA_NETWORK_STATION) -/area/quartermaster/get_turf_textures() +/area/quartermaster/get_area_textures() return GLOB.turf_texture_hallway /area/quartermaster/sorting @@ -1473,7 +1473,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station color_correction = /datum/client_colour/area_color/cold_ish camera_networks = list(CAMERA_NETWORK_STATION) -/area/hydroponics/get_turf_textures() +/area/hydroponics/get_area_textures() return GLOB.turf_texture_hallway /area/hydroponics/garden @@ -1571,7 +1571,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Robotics" icon_state = "robotics" -/area/science/robotics/get_turf_textures() +/area/science/robotics/get_area_textures() return GLOB.turf_texture_hallway /area/science/robotics/mechbay @@ -1615,7 +1615,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Primary Tool Storage" icon_state = "primarystorage" -/area/storage/primary/get_turf_textures() +/area/storage/primary/get_area_textures() return GLOB.turf_texture_hallway /area/storage/art diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index ac5310f19e421..8afb44fbd6704 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -646,5 +646,5 @@ GLOBAL_LIST_EMPTY(teleportlocs) if(mood_job_reverse) return !. // the most eye bleeding syntax ive written -/area/proc/get_turf_textures() +/area/proc/get_area_textures() return list() diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 1b8fb6f032f34..8e3789bcb5025 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -68,7 +68,7 @@ */ /atom/movable/proc/mouse_buckle_handling(mob/living/M, mob/living/user) if(can_buckle && istype(M) && istype(user)) - return user_buckle_mob(M, user) + return user_buckle_mob(M, user, check_loc = FALSE) // Mobs have custom behaviour for buckling /mob/mouse_buckle_handling(mob/living/M, mob/living/user) @@ -92,10 +92,14 @@ * force - Set to TRUE to ignore src's can_buckle and M's can_buckle_to * check_loc - Set to FALSE to allow buckling from adjacent turfs, or TRUE if buckling is only allowed with src and M on the same turf. */ -/atom/movable/proc/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) +/atom/movable/proc/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE, needs_anchored = FALSE) if(!buckled_mobs) buckled_mobs = list() + if(!anchored && needs_anchored) + to_chat(M, "Secure [src] first!") + return FALSE + if(!is_buckle_possible(M, force, check_loc)) return FALSE @@ -131,7 +135,7 @@ SEND_SIGNAL(src, COMSIG_MOVABLE_BUCKLE, M, force) return TRUE -/obj/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) +/obj/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE, needs_anchored = FALSE) . = ..() if(.) if(resistance_flags & ON_FIRE) //Sets the mob on fire if you buckle them to a burning atom/movableect diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index da22f2bf66ba3..eb02c1d4658dc 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -203,7 +203,7 @@ if (istype(S)) H.cut_overlays() H.update_body_parts_head_only() - H.pixel_y += -GUILLOTINE_HEAD_OFFSET // Offset their body so it looks like they're in the guillotine + H.pixel_y -= GUILLOTINE_HEAD_OFFSET // Offset their body so it looks like they're in the guillotine H.layer += GUILLOTINE_LAYER_DIFF else unbuckle_all_mobs() @@ -212,12 +212,10 @@ else unbuckle_all_mobs() - ..() - /obj/structure/guillotine/post_unbuckle_mob(mob/living/M) M.regenerate_icons() - M.pixel_y -= -GUILLOTINE_HEAD_OFFSET // Move their body back - M.layer -= GUILLOTINE_LAYER_DIFF + M.pixel_y = M.base_pixel_y // Move their body back + M.layer = MOB_LAYER ..() /obj/structure/guillotine/can_be_unfasten_wrench(mob/user, silent) diff --git a/code/game/objects/structures/gym/exercise_status.dm b/code/game/objects/structures/gym/exercise_status.dm index 2a33c99a6f520..004db4f8ea8e2 100644 --- a/code/game/objects/structures/gym/exercise_status.dm +++ b/code/game/objects/structures/gym/exercise_status.dm @@ -19,7 +19,6 @@ /datum/status_effect/exercised/on_creation(mob/living/new_owner, exercise_amount) src.exercise_amount = exercise_amount * EXERCISE_INCREMENT - update_exercise() return ..() /datum/status_effect/exercised/merge(exercise_amount) @@ -49,6 +48,7 @@ var/delta = exercise_amount - applied_amount var/mob/living/carbon/human/human_owner = owner human_owner.physiology.stun_add -= delta + human_owner.physiology.stamina_mod -= delta applied_amount = exercise_amount switch (exercise_amount) if (0.3 to 0.5) diff --git a/code/game/objects/structures/gym/punching_bag.dm b/code/game/objects/structures/gym/punching_bag.dm index 49792013754e9..83acce444a7a8 100644 --- a/code/game/objects/structures/gym/punching_bag.dm +++ b/code/game/objects/structures/gym/punching_bag.dm @@ -24,3 +24,10 @@ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "exercise", /datum/mood_event/exercise) user.apply_status_effect(STATUS_EFFECT_EXERCISED, 1) +/obj/structure/punching_bag/wirecutter_act(mob/living/user, obj/item/I) + to_chat(user, "You begin to cut [src] apart...") + if(I.use_tool(src, user, 40, volume=50)) + to_chat(user, "You cut [src] apart.") + new /obj/item/stack/sheet/cotton/cloth(loc, 10) + qdel(src) + return TRUE diff --git a/code/game/objects/structures/gym/weight_machine.dm b/code/game/objects/structures/gym/weight_machine.dm index b8e000a215779..705019f86c93b 100644 --- a/code/game/objects/structures/gym/weight_machine.dm +++ b/code/game/objects/structures/gym/weight_machine.dm @@ -9,6 +9,8 @@ density = TRUE anchored = TRUE blocks_emissive = EMISSIVE_BLOCK_UNIQUE + var/mutable_appearance/overlay + var/weight_type = /obj/item/barbell/stacklifting ///How much we shift the user's pixel y when using the weight machine. var/pixel_shift_y = -3 @@ -41,42 +43,61 @@ /obj/structure/weightmachine/Initialize(mapload) . = ..() - + overlay = mutable_appearance(icon, "[base_icon_state]-s") + src.add_overlay(overlay) weight_action = new(src) weight_action.weightpress = src /obj/structure/weightmachine/Destroy() + new /obj/item/stack/sheet/iron(loc, 2) + new /obj/item/stack/rods(loc, 6) + new weight_type(loc) + unbuckle_all_mobs() QDEL_NULL(weight_action) + qdel(overlay) return ..() -/obj/structure/weightmachine/buckle_mob(mob/living/buckled, force, check_loc) +/obj/structure/weightmachine/wrench_act(mob/living/user, obj/item/I) + if (default_unfasten_wrench(user, I, 50) == 2 && anchored) + setDir(SOUTH) + unbuckle_all_mobs() + return TRUE + +/obj/structure/weightmachine/screwdriver_act(mob/living/user, obj/item/I) + to_chat(user, "You begin to take apart [src]...") + if(I.use_tool(src, user, 40, volume=50)) + to_chat(user, "You deconstruct [src].") + qdel(src) + return TRUE + +/obj/structure/weightmachine/buckle_mob(mob/living/buckled, force, check_loc, needs_anchored = TRUE) . = ..() - weight_action.Grant(buckled) -// /obj/structure/weightmachine/post_buckle_mob(mob/living/buckled) -// add_overlay("[base_icon_state]-e") -// layer = ABOVE_MOB_LAYER +/obj/structure/weightmachine/post_buckle_mob(mob/living/buckled) + weight_action.Grant(buckled) + buckled.add_overlay(overlay) + src.cut_overlay(overlay) /obj/structure/weightmachine/unbuckle_mob(mob/living/buckled_mob, force, can_fall) . = ..() + src.add_overlay(overlay) + buckled_mob.cut_overlay(overlay) weight_action.Remove(buckled_mob) -// /obj/structure/weightmachine/post_unbuckle_mob(mob/living/buckled) -// cut_overlays() - /obj/structure/weightmachine/proc/perform_workout(mob/living/user) user.balloon_alert_to_viewers("[pick(more_weight)]") START_PROCESSING(SSobj, src) if(do_after(user, 8 SECONDS, src) && user.has_gravity()) - user.Stun(2 SECONDS) + user.Stun(0.5 SECONDS) if(issilicon(user) || isipc(user)) //IPCs don't have muscle mass... i think user.balloon_alert(user, pick(finished_silicon_message)) else user.balloon_alert(user, pick(finished_message)) if (user.client) user.client.give_award(/datum/award/achievement/misc/weights, user) - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "exercise", /datum/mood_event/exercise) - user.apply_status_effect(STATUS_EFFECT_EXERCISED, 10) + if(ishuman(user)) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "exercise", /datum/mood_event/exercise) + user.apply_status_effect(STATUS_EFFECT_EXERCISED, 40) end_workout() /obj/structure/weightmachine/proc/end_workout() @@ -88,12 +109,8 @@ if(!has_buckled_mobs()) end_workout() return FALSE - var/image/workout = image(icon, "[base_icon_state]-o", layer = ABOVE_MOB_LAYER) - workout.plane = GAME_PLANE //I hate the plane cube - workout.layer = FLY_LAYER - flick_overlay_view(workout,0.8 SECONDS) - flick("[base_icon_state]-u", src) var/mob/living/user = buckled_mobs[1] + flick("[base_icon_state]-u", src) animate(user, pixel_y = pixel_shift_y, time = 4, SINE_EASING) playsound(user, 'sound/machines/creak.ogg', 60, TRUE) animate(pixel_y = user.base_pixel_y, time = 4, SINE_EASING) @@ -109,3 +126,32 @@ icon_state = "benchpress" base_icon_state = "benchpress" pixel_shift_y = 5 + weight_type = /obj/item/barbell + +/obj/item/barbell + name = "barbell" + desc = "A long bar with some huge weights on the ends. Very impressive." + icon = 'icons/obj/fitness.dmi' + icon_state = "barbell" + lefthand_file = 'icons/mob/inhands/equipment/weightlifting.dmi' + righthand_file = 'icons/mob/inhands/equipment/weightlifting.dmi' + flags_1 = CONDUCT_1 + force = 16 + throwforce = 16 + block_flags = BLOCKING_ACTIVE | BLOCKING_NASTY + attack_weight = 2 + w_class = WEIGHT_CLASS_HUGE + item_flags = SLOWS_WHILE_IN_HAND + custom_materials = list(/datum/material/iron=10000) + throw_speed = 1 + throw_range = 2 + slowdown = 2 + +/obj/item/barbell/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, require_twohands=TRUE, block_power_unwielded=block_power, block_power_wielded=block_power) + +/obj/item/barbell/stacklifting + name = "chest press handle" + desc = "A handle that attaches to some heavy weights. Looks complicated." + icon_state = "chestpress" diff --git a/code/game/turfs/open/floor/iron_floor.dm b/code/game/turfs/open/floor/iron_floor.dm index 8d9c8173f6016..1774fb5238b6d 100644 --- a/code/game/turfs/open/floor/iron_floor.dm +++ b/code/game/turfs/open/floor/iron_floor.dm @@ -34,21 +34,33 @@ base_icon_state = "floor_edge" floor_tile = /obj/item/stack/tile/iron/edge +/turf/open/floor/iron/edge/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/half icon_state = "floor_half" base_icon_state = "floor_half" floor_tile = /obj/item/stack/tile/iron/half +/turf/open/floor/iron/half/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/corner icon_state = "floor_corner" base_icon_state = "floor_corner" floor_tile = /obj/item/stack/tile/iron/corner +/turf/open/floor/iron/corner/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/large icon_state = "floor_large" base_icon_state = "floor_large" floor_tile = /obj/item/stack/tile/iron/large +/turf/open/floor/iron/large/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/textured icon_state = "textured" base_icon_state = "textured" @@ -59,21 +71,33 @@ base_icon_state = "textured_edge" floor_tile = /obj/item/stack/tile/iron/textured_edge +/turf/open/floor/iron/textured_edge/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/textured_half icon_state = "textured_half" base_icon_state = "textured_half" floor_tile = /obj/item/stack/tile/iron/textured_half +/turf/open/floor/iron/textured_half/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/textured_corner icon_state = "textured_corner" base_icon_state = "textured_corner" floor_tile = /obj/item/stack/tile/iron/textured_corner +/turf/open/floor/iron/textured_corner/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/textured_large icon_state = "textured_large" base_icon_state = "textured_large" floor_tile = /obj/item/stack/tile/iron/textured_large +/turf/open/floor/iron/textured_large/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark icon_state = "darkfull" base_icon_state = "darkfull" @@ -84,31 +108,49 @@ base_icon_state = "dark_edge" floor_tile = /obj/item/stack/tile/iron/dark/smooth_edge +/turf/open/floor/iron/dark/smooth_edge/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark/smooth_half icon_state = "dark_half" base_icon_state = "dark_half" floor_tile = /obj/item/stack/tile/iron/dark/smooth_half +/turf/open/floor/iron/dark/smooth_half/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark/smooth_corner icon_state = "dark_corner" base_icon_state = "dark_corner" floor_tile = /obj/item/stack/tile/iron/dark/smooth_corner +/turf/open/floor/iron/dark/smooth_corner/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark/smooth_large icon_state = "dark_large" base_icon_state = "dark_large" floor_tile = /obj/item/stack/tile/iron/dark/smooth_large +/turf/open/floor/iron/dark/smooth_large/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark/side icon_state = "darkside" base_icon_state = "darkside" floor_tile = /obj/item/stack/tile/iron/dark_side +/turf/open/floor/iron/dark/side/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark/corner icon_state = "darkcorner" base_icon_state = "darkcorner" floor_tile = /obj/item/stack/tile/iron/dark_corner +/turf/open/floor/iron/dark/corner/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/checker icon_state = "blackwhite" base_icon_state = "blackwhite" @@ -129,16 +171,25 @@ base_icon_state = "textured_dark_edge" floor_tile = /obj/item/stack/tile/iron/dark/textured_edge +/turf/open/floor/iron/dark/textured_edge/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark/textured_half icon_state = "textured_dark_half" base_icon_state = "textured_dark_half" floor_tile = /obj/item/stack/tile/iron/dark/textured_half +/turf/open/floor/iron/dark/textured_half/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark/textured_corner icon_state = "textured_dark_corner" base_icon_state = "textured_dark_corner" floor_tile = /obj/item/stack/tile/iron/dark/textured_corner +/turf/open/floor/iron/dark/textured_large/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/dark/textured_large icon_state = "textured_dark_large" base_icon_state = "textured_dark_large" @@ -169,31 +220,49 @@ base_icon_state = "white_edge" floor_tile = /obj/item/stack/tile/iron/white/smooth_edge +/turf/open/floor/iron/white/smooth_edge/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/smooth_half icon_state = "white_half" base_icon_state = "white_half" floor_tile = /obj/item/stack/tile/iron/white/smooth_half +/turf/open/floor/iron/white/smooth_half/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/smooth_corner icon_state = "white_corner" base_icon_state = "white_corner" floor_tile = /obj/item/stack/tile/iron/white/smooth_corner +/turf/open/floor/iron/white/smooth_corner/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/smooth_large icon_state = "white_large" base_icon_state = "white_large" floor_tile = /obj/item/stack/tile/iron/white/smooth_large +/turf/open/floor/iron/white/smooth_large/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/side icon_state = "whitehall" base_icon_state = "whitehall" floor_tile = /obj/item/stack/tile/iron/white_side +/turf/open/floor/iron/white/side/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/corner icon_state = "whitecorner" base_icon_state = "whitecorner" floor_tile = /obj/item/stack/tile/iron/white_corner +/turf/open/floor/iron/white/corner/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/cafeteria icon_state = "cafeteria" base_icon_state = "cafeteria" @@ -209,21 +278,33 @@ base_icon_state = "textured_white_edge" floor_tile = /obj/item/stack/tile/iron/white/textured_edge +/turf/open/floor/iron/white/textured_edge/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/textured_half icon_state = "textured_white_half" base_icon_state = "textured_white_half" floor_tile = /obj/item/stack/tile/iron/white/textured_half +/turf/open/floor/iron/white/textured_half/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/textured_corner icon_state = "textured_white_corner" base_icon_state = "textured_white_corner" floor_tile = /obj/item/stack/tile/iron/white/textured_corner +/turf/open/floor/iron/white/textured_corner/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/textured_large icon_state = "textured_white_large" base_icon_state = "textured_white_large" floor_tile = /obj/item/stack/tile/iron/white/textured_large +/turf/open/floor/iron/white/textured_large/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/white/airless initial_gas_mix = AIRLESS_ATMOS @@ -259,21 +340,33 @@ base_icon_state = "smooth_edge" floor_tile = /obj/item/stack/tile/iron/smooth_edge +/turf/open/floor/iron/smooth_edge/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/smooth_half icon_state = "smooth_half" base_icon_state = "smooth_half" floor_tile = /obj/item/stack/tile/iron/smooth_half +/turf/open/floor/iron/smooth_half/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/smooth_corner icon_state = "smooth_corner" base_icon_state = "smooth_corner" floor_tile = /obj/item/stack/tile/iron/smooth_corner +/turf/open/floor/iron/smooth_corner/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/smooth_large icon_state = "smooth_large" base_icon_state = "smooth_large" floor_tile = /obj/item/stack/tile/iron/smooth_large +/turf/open/floor/iron/smooth_large/get_turf_texture() + return GLOB.turf_texture_iron_nonsegmented + /turf/open/floor/iron/chapel icon_state = "chapel" base_icon_state = "chapel" diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 6a375c26b2091..7abd4bc94c792 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -296,7 +296,7 @@ CREATION_TEST_IGNORE_SELF(/turf) // Here's hoping it doesn't stay like this for years before we finish conversion to step_ var/atom/firstbump var/canPassSelf = CanPass(mover, get_dir(src, mover)) - + if(canPassSelf || (mover.movement_type & PHASING)) for(var/atom/movable/thing as anything in contents) if(QDELETED(mover)) @@ -574,7 +574,7 @@ CREATION_TEST_IGNORE_SELF(/turf) var/datum/turf_texture/turf_texture for(var/datum/turf_texture/TF as() in textures) var/area/A = loc - if(TF in A?.get_turf_textures()) + if(TF in A?.get_area_textures()) turf_texture = turf_texture ? initial(TF.priority) > initial(turf_texture.priority) ? TF : turf_texture : TF if(turf_texture) vis_contents += load_turf_texture(turf_texture) diff --git a/code/game/turfs/turf_texture.dm b/code/game/turfs/turf_texture.dm index 25cfdcccef721..609af16c4d007 100644 --- a/code/game/turfs/turf_texture.dm +++ b/code/game/turfs/turf_texture.dm @@ -43,6 +43,10 @@ CREATION_TEST_IGNORE_SUBTYPES(/atom/movable/turf_texture) icon_state = "hallway" alpha = 55 +/datum/turf_texture/hallway_nonsegmented + icon_state = "hallway_nonsegmented" + alpha = 55 + //Deep maint use /datum/turf_texture/maint icon_state = "maint" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index fb7da1e22b329..104b2d103be9b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -38,6 +38,7 @@ if (usr.client) if(usr.client.holder) to_chat(M, "You hear a voice in your head... [msg]") + M.balloon_alert(M, "You hear a voice in your head...") log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]") msg = " SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]" @@ -78,6 +79,7 @@ log_directed_talk(mob, H, input, LOG_ADMIN, "reply") message_admins("[key_name_admin(src)] replied to [key_name_admin(H)]'s [sender] message with: \"[input]\"") to_chat(H, "You hear something crackle in your ears for a moment before a voice speaks. \"Please stand by for a message from [sender == "Syndicate" ? "your benefactor" : JOB_CENTCOM_CENTRAL_COMMAND]. Message as follows[sender == "Syndicate" ? ", agent." : ":"] [input]. Message ends.\"") + H.balloon_alert(H, "You hear a voice in your head...") SSblackbox.record_feedback("tally", "admin_verb", 1, "Headset Message") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index b71fe9a568471..fa945412170d3 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -26,7 +26,8 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/item/hilbertshotel, /obj/item/swapper, /obj/item/mail, - /obj/docking_port + /obj/docking_port, + /obj/effect/warped_rune // no teleporting to cc for you ))) /obj/docking_port/mobile/supply diff --git a/code/modules/spells/spell_types/telepathy.dm b/code/modules/spells/spell_types/telepathy.dm index 52b3dcb88ac35..f4f1c3106246b 100644 --- a/code/modules/spells/spell_types/telepathy.dm +++ b/code/modules/spells/spell_types/telepathy.dm @@ -30,6 +30,7 @@ to_chat(user, "You transmit to [M]: [msg]") if(!M.anti_magic_check(magic_check, holy_check)) //hear no evil to_chat(M, "You hear something behind you talking... [msg]") + M.balloon_alert(M, "You hear a voice in your head...") for(var/ded in GLOB.dead_mob_list) if(!isobserver(ded)) continue diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index b82dbeebeafca..4a74b475d5673 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -714,7 +714,7 @@ //icon_state = "default_human_l_arm" attack_verb_continuous = list("slaps", "punches") attack_verb_simple = list("slap", "punch") - max_damage = 50 + max_damage = 40 max_stamina_damage = 50 body_zone = BODY_ZONE_L_ARM body_part = ARM_LEFT @@ -819,7 +819,7 @@ //icon_state = "default_human_r_arm" attack_verb_continuous = list("slaps", "punches") attack_verb_simple = list("slap", "punch") - max_damage = 50 + max_damage = 40 max_stamina_damage = 50 body_zone = BODY_ZONE_R_ARM body_part = ARM_RIGHT @@ -925,7 +925,7 @@ //icon_state = "default_human_l_leg" attack_verb_continuous = list("kicks", "stomps") attack_verb_simple = list("kick", "stomp") - max_damage = 50 + max_damage = 40 body_zone = BODY_ZONE_L_LEG body_part = LEG_LEFT plaintext_zone = "left leg" @@ -1024,7 +1024,7 @@ //icon_state = "default_human_r_leg" attack_verb_continuous = list("kicks", "stomps") attack_verb_simple = list("kick", "stomp") - max_damage = 50 + max_damage = 40 body_zone = BODY_ZONE_R_LEG body_part = LEG_RIGHT plaintext_zone = "right leg" diff --git a/html/changelog.html b/html/changelog.html index bdf323411e5bb..12c1fe5607fb7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,37 @@ -->
+

22 December 2024

+

BarteG44 updated:

+ +

PowerfulBacon updated:

+ +

Therealdoooc213 updated:

+ +

Tsar-Salat updated:

+ + +

16 December 2024

+

Rukofamicom updated:

+ +

15 December 2024

Tsar-Salat updated:

GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index bb77fd73ce3fb..cc31079781f8b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -45214,3 +45214,24 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - refactor: genericizes how turfs handle armor - bugfix: fix ripley goliath armor runtime - bugfix: fix armor tag examination runtime +2024-12-16: + Rukofamicom: + - tweak: limbs are now disabled upon taking 40 damage instead of 50. + - balance: This means stamina weapons can be strategically used to disable limbs + without chest-aimed full stamcrit always being the better option. + - balance: This also means it is somewhat easier for sharp weapons to de-limb. +2024-12-22: + BarteG44: + - bugfix: fixes not being able to buckle to the weight lifting machines and their + animations + - bugfix: fixes the exercised status not giving stamina damage resistance + - bugfix: fixes the guillotine having the wrong offset + - tweak: increases the amount of exercise you get from weight lifting machines + - rscadd: makes gym equipment constructable via the construction menu + PowerfulBacon: + - bugfix: Fixes echostation disposals resulting in random testing failures. + Therealdoooc213: + - tweak: Subtle messages, telepathy, and headset messages now show a balloon alert + - bugfix: you can no longer get to centcom with warped runes + Tsar-Salat: + - bugfix: fixes segmented turf textures applying to nonsegmented turfs... very ugly... diff --git a/icons/mob/inhands/equipment/weightlifting.dmi b/icons/mob/inhands/equipment/weightlifting.dmi new file mode 100644 index 0000000000000..8d45776dd527c Binary files /dev/null and b/icons/mob/inhands/equipment/weightlifting.dmi differ diff --git a/icons/obj/fitness.dmi b/icons/obj/fitness.dmi index 88faf3c44a697..163262f59d23d 100644 Binary files a/icons/obj/fitness.dmi and b/icons/obj/fitness.dmi differ diff --git a/icons/turf/turf_texture.dmi b/icons/turf/turf_texture.dmi index 6c0d5b90bdc03..110c3507acfd1 100644 Binary files a/icons/turf/turf_texture.dmi and b/icons/turf/turf_texture.dmi differ