diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index 7ee6057ceb8..b1ca857c30a 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -229,6 +229,14 @@ DEFINE_BITFIELD(smoothing_junction, list( #define SMOOTH_GROUP_TEST_WALL S_OBJ(77) // I'm a lazy bum who doesn't want to increment all of these up by 1 ~Lemon #define SMOOTH_GROUP_ATMOS_SHIELD S_OBJ(78) +#define SMOOTH_GROUP_PLATFORMS S_OBJ(80) ///obj/structure/platform & rusty +#define SMOOTH_GROUP_PLATFORMS_SHUTTLE S_OBJ(81) ///obj/structure/platform/titanium & plastitanium +#define SMOOTH_GROUP_PLATFORMS_MATERIAL S_OBJ(82) ///obj/structure/platform/material & iron & silver & gold & uranium & bronze +#define SMOOTH_GROUP_PLATFORMS_WOOD S_OBJ(83) ///obj/structure/platform/wood & bamboo & hotel +#define SMOOTH_GROUP_PLATFORMS_STONE S_OBJ(84) ///obj/structure/platform/sandstone & cult +#define SMOOTH_GROUP_PLATFORMS_PIZZA S_OBJ(85) ///obj/structure/platform/pizza +#define SMOOTH_GROUP_PLATFORMS_PAPER S_OBJ(86) ///obj/structure/platform/paper + /// Performs the work to set smoothing_groups and canSmoothWith. /// An inlined function used in both turf/Initialize and atom/Initialize. #define SETUP_SMOOTHING(...) \ diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 066b7d90ac9..b5993e8c8ba 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1539,6 +1539,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait that signals to objects on this turf that its open (has UNDERFLOOR_INTERACTIBLE) but still covers them #define TRAIT_UNCOVERED_TURF "uncovered_turf" +///Attached to objects currently on tables and such, allowing them to walk on other objects without the climbing delay +#define TRAIT_ON_CLIMBABLE "on_climbable" + /// Trait that allows mobs to perform surgery on themselves #define TRAIT_SELF_SURGERY "self_surgery" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index cb5161b6c76..16f28002588 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -75,6 +75,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NOT_BARFABLE" = TRAIT_NOT_BARFABLE, "TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, "TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT" = TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT, + "TRAIT_ON_CLIMBABLE" = TRAIT_ON_CLIMBABLE, "TRAIT_ON_HIT_EFFECT" = TRAIT_ON_HIT_EFFECT, "TRAIT_RAINSTORM_IMMUNE" = TRAIT_RAINSTORM_IMMUNE, "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index f5af2853b94..b31819e1f70 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -26,6 +26,7 @@ SUBSYSTEM_DEF(materials) new /datum/stack_recipe("Sink Frame", /obj/structure/sinkframe, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_FURNITURE), new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, crafting_flags = CRAFT_APPLIES_MATS, category = CAT_TILES), new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), + new /datum/stack_recipe("Material platform", /obj/structure/platform/material, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ ) ///List of stackcrafting recipes for materials using rigid recipes var/list/rigid_stack_recipes = list( diff --git a/code/datums/components/climb_walkable.dm b/code/datums/components/climb_walkable.dm new file mode 100644 index 00000000000..ee36c448b36 --- /dev/null +++ b/code/datums/components/climb_walkable.dm @@ -0,0 +1,29 @@ +/// Allows objects that entered parent's tile to move freely through other objects with this component regardless of density +/datum/component/climb_walkable + +/datum/component/climb_walkable/RegisterWithParent() + var/static/list/turf_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_enter), + COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON = PROC_REF(on_enter), + COMSIG_ATOM_EXITED = PROC_REF(on_exit), + ) + AddComponent(/datum/component/connect_loc_behalf, parent, turf_connections) + RegisterSignal(parent, COMSIG_ATOM_TRIED_PASS, PROC_REF(can_allow_through)) + +/datum/component/climb_walkable/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ATOM_TRIED_PASS) + for (var/atom/movable/climber in get_turf(parent)) + REMOVE_TRAIT(parent, TRAIT_ON_CLIMBABLE, REF(src)) + +/datum/component/climb_walkable/proc/on_enter(datum/source, atom/movable/arrived) + SIGNAL_HANDLER + ADD_TRAIT(arrived, TRAIT_ON_CLIMBABLE, REF(src)) + +/datum/component/climb_walkable/proc/on_exit(datum/source, atom/movable/gone, direction) + SIGNAL_HANDLER + REMOVE_TRAIT(gone, TRAIT_ON_CLIMBABLE, REF(src)) + +/datum/component/climb_walkable/proc/can_allow_through(datum/source, atom/movable/mover, border_dir) + SIGNAL_HANDLER + if(HAS_TRAIT(mover, TRAIT_ON_CLIMBABLE)) + return COMSIG_COMPONENT_PERMIT_PASSAGE diff --git a/code/datums/components/table_smash.dm b/code/datums/components/table_smash.dm new file mode 100644 index 00000000000..017f0cff7b3 --- /dev/null +++ b/code/datums/components/table_smash.dm @@ -0,0 +1,197 @@ +/// Component which allows mobs to be smashed onto this surface like a wrestling move +/datum/component/table_smash + /// If true, mobs will be placed gently on the table even if they're in an aggressive grab + var/gentle_push + /// Callback invoked after a hostile table action + var/datum/callback/after_smash + +/datum/component/table_smash/Initialize(gentle_push = FALSE, after_smash = null) + . = ..() + if (!isobj(parent)) + return COMPONENT_INCOMPATIBLE + + src.gentle_push = gentle_push + src.after_smash = after_smash + +/datum/component/table_smash/RegisterWithParent() + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_interaction)) + RegisterSignal(parent, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_item_interaction)) + + var/static/list/loc_connections = list( + COMSIG_LIVING_DISARM_COLLIDE = PROC_REF(on_pushed_into), + ) + AddComponent(/datum/component/connect_loc_behalf, parent, loc_connections) + +/datum/component/table_smash/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ITEM_INTERACTION)) + +/// Called when someone clicks on our surface +/datum/component/table_smash/proc/on_interaction(obj/table, mob/user) + SIGNAL_HANDLER + + if (!table.Adjacent(user) || !user.pulling) + return + + if (!isliving(user.pulling)) + if (!(user.pulling.pass_flags & PASSTABLE)) + return + + user.Move_Pulled(table) + + if (user.pulling.loc == table.loc) + user.visible_message(span_notice("[user] places [user.pulling] onto [table]."), + span_notice("You place [user.pulling] onto [table].")) + user.stop_pulling() + + return COMPONENT_CANCEL_ATTACK_CHAIN + + var/mob/living/pushed_mob = user.pulling + if (pushed_mob.buckled) + if (pushed_mob.buckled == table) + //Already buckled to the table, you probably meant to unbuckle them + return + + to_chat(user, span_warning("[pushed_mob] is buckled to [pushed_mob.buckled]!")) + return COMPONENT_CANCEL_ATTACK_CHAIN + + INVOKE_ASYNC(src, PROC_REF(perform_table_smash), table, user) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/// We have a mob being pressed onto the table, but how strongly? +/datum/component/table_smash/proc/perform_table_smash(obj/table, mob/living/user) + var/mob/living/pushed_mob = user.pulling + if (user.combat_mode) + switch(user.grab_state) + if (GRAB_PASSIVE) + to_chat(user, span_warning("You need a better grip to do that!")) + return + if (GRAB_AGGRESSIVE) + if (gentle_push) + tableplace(user, pushed_mob) + else + tablepush(user, pushed_mob) + if (GRAB_NECK to GRAB_KILL) + tablelimbsmash(user, pushed_mob) + else + pushed_mob.visible_message(span_notice("[user] begins to place [pushed_mob] onto [table]..."), \ + span_userdanger("[user] begins to place [pushed_mob] onto [table]...")) + if (do_after(user, 3.5 SECONDS, target = pushed_mob)) + tableplace(user, pushed_mob) + else + return + + user.stop_pulling() + +/// Called when someone clicks on our surface with an item +/datum/component/table_smash/proc/on_item_interaction(obj/table, mob/living/user, obj/item/item, modifiers) + SIGNAL_HANDLER + if (!istype(item, /obj/item/riding_offhand)) + return NONE + + var/obj/item/riding_offhand/riding_item = item + var/mob/living/carried_mob = riding_item.rider + if (carried_mob == user) //Piggyback user. + return NONE + + INVOKE_ASYNC(src, PROC_REF(riding_offhand_act), user, item) + return ITEM_INTERACT_BLOCKING + +/// Called when someone clicks on our surface using a fireman's carry +/datum/component/table_smash/proc/riding_offhand_act(mob/living/user, obj/item/riding_offhand/riding_item) + var/mob/living/carried_mob = riding_item.rider + if (user.combat_mode) + user.unbuckle_mob(carried_mob) + tablelimbsmash(user, carried_mob) + return ITEM_INTERACT_SUCCESS + + var/tableplace_delay = 3.5 SECONDS + var/skills_space = "" + if (HAS_TRAIT(user, TRAIT_QUICKER_CARRY)) + tableplace_delay = 2 SECONDS + skills_space = " expertly" + else if (HAS_TRAIT(user, TRAIT_QUICK_CARRY)) + tableplace_delay = 2.75 SECONDS + skills_space = " quickly" + + var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE) + if (istype(potential_spine)) + tableplace_delay *= potential_spine.athletics_boost_multiplier + + carried_mob.visible_message(span_notice("[user] begins to[skills_space] place [carried_mob] onto [parent]..."), + span_userdanger("[user] begins to[skills_space] place [carried_mob] onto [parent]...")) + if (!do_after(user, tableplace_delay, target = carried_mob)) + return ITEM_INTERACT_BLOCKING + user.unbuckle_mob(carried_mob) + tableplace(user, carried_mob) + return ITEM_INTERACT_SUCCESS + +/// Gently place the mob onto the table +/datum/component/table_smash/proc/tableplace(mob/living/user, mob/living/pushed_mob) + var/obj/table = parent + pushed_mob.forceMove(table.loc) + pushed_mob.set_resting(TRUE, TRUE) + pushed_mob.visible_message(span_notice("[user] places [pushed_mob] onto [parent]."), \ + span_notice("[user] places [pushed_mob] onto [parent].")) + log_combat(user, pushed_mob, "places", null, "onto [parent]") + +/// Aggressively smash the mob onto the table +/datum/component/table_smash/proc/tablepush(mob/living/user, mob/living/pushed_mob) + if (HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, span_danger("Throwing [pushed_mob] onto the table might hurt them!")) + return + + var/passtable_key = REF(user) + passtable_on(pushed_mob, passtable_key) + for (var/obj/obj in user.loc.contents) + if (!obj.CanAllowThrough(pushed_mob)) + return + + var/obj/table = parent + pushed_mob.Move(table.loc) + passtable_off(pushed_mob, passtable_key) + if (pushed_mob.loc != table.loc) //Something prevented the tabling + return + + pushed_mob.Knockdown(3 SECONDS) + pushed_mob.apply_damage(10, BRUTE) + pushed_mob.apply_damage(40, STAMINA) + playsound(pushed_mob, 'sound/effects/tableslam.ogg', 90, TRUE) + pushed_mob.visible_message(span_danger("[user] slams [pushed_mob] onto \the [parent]!"), \ + span_userdanger("[user] slams you onto \the [parent]!")) + log_combat(user, pushed_mob, "tabled", null, "onto [parent]") + pushed_mob.add_mood_event("table", /datum/mood_event/table) + SEND_SIGNAL(user, COMSIG_LIVING_TABLE_SLAMMING, pushed_mob, parent) + after_smash?.Invoke(pushed_mob) + +/// Even more aggressively smash a single part of a mob onto the table +/datum/component/table_smash/proc/tablelimbsmash(mob/living/user, mob/living/pushed_mob) + var/obj/table = parent + pushed_mob.Knockdown(3 SECONDS) + var/obj/item/bodypart/banged_limb = pushed_mob.get_bodypart(user.zone_selected) || pushed_mob.get_bodypart(BODY_ZONE_HEAD) + var/extra_wound = 0 + if (HAS_TRAIT(user, TRAIT_HULK)) + extra_wound = 20 + pushed_mob.apply_damage(30, BRUTE, banged_limb, wound_bonus = extra_wound) + pushed_mob.apply_damage(60, STAMINA) + playsound(pushed_mob, 'sound/effects/bang.ogg', 90, TRUE) + pushed_mob.visible_message(span_danger("[user] smashes [pushed_mob]'s [banged_limb.plaintext_zone] against \the [parent]!"), + span_userdanger("[user] smashes your [banged_limb.plaintext_zone] against \the [parent]")) + log_combat(user, pushed_mob, "head slammed", null, "against [parent]") + pushed_mob.add_mood_event("table", /datum/mood_event/table_limbsmash, banged_limb) + table.take_damage(50) + SEND_SIGNAL(user, COMSIG_LIVING_TABLE_LIMB_SLAMMING, pushed_mob, parent) + after_smash?.Invoke(pushed_mob) + +/// Called when someone is shoved into our tile +/datum/component/table_smash/proc/on_pushed_into(turf/source, mob/living/shover, mob/living/target, shove_flags, obj/item/weapon) + SIGNAL_HANDLER + if((shove_flags & SHOVE_KNOCKDOWN_BLOCKED) || !(shove_flags & SHOVE_BLOCKED)) + return + target.Knockdown(SHOVE_KNOCKDOWN_TABLE, daze_amount = 3 SECONDS) + target.visible_message(span_danger("[shover.name] shoves [target.name] onto \the [parent]!"), + span_userdanger("You're shoved onto \the [parent] by [shover.name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, shover) + to_chat(shover, span_danger("You shove [target.name] onto \the [parent]!")) + target.throw_at(parent, 1, 1, null, FALSE) //1 speed throws with no spin are basically just forcemoves with a hard collision check + log_combat(shover, target, "shoved", "onto [parent] (table)[weapon ? " with [weapon]" : ""]") + after_smash?.Invoke(target) + return COMSIG_LIVING_SHOVE_HANDLED diff --git a/code/datums/elements/elevation.dm b/code/datums/elements/elevation.dm index 5f3bf6c0b99..80a9bbe323c 100644 --- a/code/datums/elements/elevation.dm +++ b/code/datums/elements/elevation.dm @@ -23,6 +23,7 @@ register_turf(atom_target, atom_target.loc) /datum/element/elevation/Detach(atom/movable/source) + UnregisterSignal(source, COMSIG_MOVABLE_MOVED) unregister_turf(source, source.loc) REMOVE_TRAIT(source, TRAIT_ELEVATING_OBJECT, ref(src)) UnregisterSignal(source, COMSIG_MOVABLE_MOVED) diff --git a/code/datums/elements/footstep_override.dm b/code/datums/elements/footstep_override.dm index 43d73113280..823f10b32b0 100644 --- a/code/datums/elements/footstep_override.dm +++ b/code/datums/elements/footstep_override.dm @@ -34,6 +34,7 @@ occupy_turf(target, target.loc) /datum/element/footstep_override/Detach(atom/movable/source) + UnregisterSignal(source, COMSIG_MOVABLE_MOVED) if(isturf(source.loc)) vacate_turf(source, source.loc) return ..() diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm index 8f10717c771..117c809a775 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm @@ -22,6 +22,7 @@ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 1), /obj/structure/table = list(/obj/structure/table/greyscale = 1), /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1), + /obj/structure/platform = list(/obj/structure/platform/material = 1), ) /// List of random spawns to place in completely open turfs var/list/random_spawns @@ -194,7 +195,9 @@ /obj/structure/table, \ /obj/structure/toilet, \ /obj/structure/window, \ - /obj/structure/sink,) + /obj/structure/sink, \ + /obj/structure/platform, \ +) /** * Returns true if the provided object can have its material modified. @@ -236,6 +239,13 @@ icon = 'icons/obj/stack_objects.dmi' icon_state = "sheet-gold_2" material = /datum/material/gold + replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/greyscale = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/gold = 1, /obj/machinery/door/airlock/gold/glass = 1), + /obj/structure/table = list(/obj/structure/table/greyscale = 1), + /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1), + /obj/structure/platform = list(/obj/structure/platform/gold = 1), + ) /datum/dimension_theme/plasma name = "Plasma" @@ -270,6 +280,13 @@ icon_state = "pizzamargherita" material = /datum/material/pizza sound = 'sound/items/eatfood.ogg' + replace_objs = list( + /obj/structure/chair = list(/obj/structure/chair/greyscale = 1), + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 1), + /obj/structure/table = list(/obj/structure/table/greyscale = 1), + /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1), + /obj/structure/platform = list(/obj/structure/platform/pizza = 1), + ) /datum/dimension_theme/natural name = "Natural" @@ -282,6 +299,7 @@ /obj/structure/chair = list(/obj/structure/chair/wood = 3, /obj/structure/chair/wood/wings = 1), /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), /obj/structure/table = list(/obj/structure/table/wood = 5, /obj/structure/table/wood/fancy = 1), + /obj/structure/platform = list(/obj/structure/platform/wood = 1), ) /datum/dimension_theme/bamboo @@ -295,6 +313,7 @@ /obj/structure/chair = list(/obj/structure/chair/stool/bamboo = 1), /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), /obj/structure/table = list(/obj/structure/table/wood = 1), + /obj/structure/platform = list(/obj/structure/platform/bamboo = 1), ) /datum/dimension_theme/icebox @@ -321,6 +340,7 @@ /obj/structure/chair = list(/obj/structure/chair/wood = 1), /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1), /obj/structure/table = list(/obj/structure/table/wood = 1), + /obj/structure/platform = list(/obj/structure/platform/wood = 1), ) /datum/dimension_theme/lavaland @@ -330,7 +350,10 @@ window_colour = "#860000" replace_floors = list(/turf/open/floor/fakebasalt = 5, /turf/open/floor/fakepit = 1) replace_walls = /turf/closed/wall/mineral/cult - replace_objs = list(/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/external/glass/ruin = 1)) + replace_objs = list( + /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/external/glass/ruin = 1), + /obj/structure/platform = list(/obj/structure/platform/cult = 1), + ) random_spawns = list(/mob/living/basic/mining/goldgrub) random_spawn_chance = 1 @@ -361,6 +384,7 @@ replace_objs = list( /obj/structure/chair = list(/obj/structure/chair/comfy = 1), /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), + /obj/structure/platform = list(/obj/structure/platform/paper = 1), ) /// Cooldown for changing carpets, It's kinda dull to always use the same one, but we also can't make it too random. COOLDOWN_DECLARE(carpet_switch_cd) @@ -424,6 +448,7 @@ /obj/structure/chair = list(/obj/structure/chair/wood = 1), /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1), /obj/structure/table = list(/obj/structure/table/wood = 1), + /obj/structure/platform = list(/obj/structure/platform/wood = 1), ) random_spawns = list( /mob/living/carbon/human/species/monkey, @@ -448,6 +473,7 @@ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 2), /obj/structure/table = list(/obj/structure/table/greyscale = 9, /obj/structure/table/abductor = 1), /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1), + /obj/structure/platform = list(/obj/structure/platform/uranium = 1), ) /datum/dimension_theme/bronze @@ -467,5 +493,6 @@ /obj/structure/chair = list(/obj/structure/chair/bronze = 1), /obj/item/reagent_containers/cup/glass/trophy = list(/obj/item/reagent_containers/cup/glass/trophy/bronze_cup = 1), /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/bronze = 1), + /obj/structure/platform = list(/obj/structure/platform/bronze = 1), ) sound = 'sound/effects/magic/clockwork/fellowship_armory.ogg' diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index cc52ae05c1d..f498959064f 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -25,8 +25,9 @@ Mineral Sheets GLOBAL_LIST_INIT(sandstone_recipes, list ( \ new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ - new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC) \ - )) + new/datum/stack_recipe("sandstone platform", /obj/structure/platform/sandstone, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC), \ +)) /obj/item/stack/sheet/mineral/sandstone name = "sandstone brick" @@ -139,6 +140,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ GLOBAL_LIST_INIT(uranium_recipes, list ( \ new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("depleted uranium platform", /obj/structure/platform/uranium, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) @@ -213,6 +215,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ GLOBAL_LIST_INIT(gold_recipes, list ( \ new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("golden platform", /obj/structure/platform/gold, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1, crafting_flags = NONE, category = CAT_FURNITURE), \ new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/costume/crown, 5, crafting_flags = NONE, category = CAT_CLOTHING), \ @@ -244,6 +247,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ GLOBAL_LIST_INIT(silver_recipes, list ( \ new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("silver platform", /obj/structure/platform/silver, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) @@ -303,6 +307,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ GLOBAL_LIST_INIT(titanium_recipes, list ( \ new /datum/stack_recipe("Titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ + new/datum/stack_recipe("Titanium Platform", /obj/structure/platform/titanium, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ new /datum/stack_recipe("Shuttle seat", /obj/structure/chair/comfy/shuttle, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ new /datum/stack_recipe("Material tram door assembly", /obj/structure/door_assembly/multi_tile/door_assembly_tram, 8, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ )) @@ -357,6 +362,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ + new/datum/stack_recipe("plastitanium platform", /obj/structure/platform/plastitanium, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ )) /obj/item/stack/sheet/mineral/plastitanium/get_main_recipes() diff --git a/code/game/objects/items/stacks/sheets/runed_metal.dm b/code/game/objects/items/stacks/sheets/runed_metal.dm index 44094a0bf78..5e0900a3ff3 100644 --- a/code/game/objects/items/stacks/sheets/runed_metal.dm +++ b/code/game/objects/items/stacks/sheets/runed_metal.dm @@ -63,6 +63,8 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \ required_noun = "runed metal sheet", \ category = CAT_CULT, \ ), \ + + new /datum/stack_recipe("runed stone platform", /obj/structure/platform/cult, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ )) /obj/item/stack/sheet/runed_metal diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 29950bc6c0e..e90cef6fe99 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -94,7 +94,11 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("iron rod", /obj/item/stack/rods, 1, 2, 60, category = CAT_MISC), \ null, \ new/datum/stack_recipe("wall girders (anchored)", /obj/structure/girder, 2, time = 4 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, placement_checks = STACK_CHECK_TRAM_FORBIDDEN, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ - null, \ + new /datum/stack_recipe_list("platforms (anchored)", list( \ + new /datum/stack_recipe("rounded platform", /obj/structure/platform, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ + new /datum/stack_recipe("rough platform", /obj/structure/platform/iron, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ + new /datum/stack_recipe("platform steps", /obj/structure/steps, 2, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ + )), null, \ new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ new/datum/stack_recipe("modular console", /obj/machinery/modular_computer, 10, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ @@ -326,10 +330,14 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ * Wood */ GLOBAL_LIST_INIT(wood_recipes, list ( \ - new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, category = CAT_CLOTHING), \ - new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, category = CAT_TILES), \ - new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 1 SECONDS, category = CAT_FURNITURE), \ - new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 3 SECONDS, category = CAT_TOOLS), \ + new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ + new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 1 SECONDS, crafting_flags = NONE, category = CAT_FURNITURE), \ + new /datum/stack_recipe_list("platforms (anchored)", list( \ + new /datum/stack_recipe("wooden platform", /obj/structure/platform/wood, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ + new /datum/stack_recipe("wooden stage", /obj/structure/platform/wood/stage, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ + )), + new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 3 SECONDS, crafting_flags = NONE, category = CAT_TOOLS), \ new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ @@ -439,6 +447,7 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \ new/datum/stack_recipe("bamboo stool", /obj/structure/chair/stool/bamboo, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ new/datum/stack_recipe("bamboo mat piece", /obj/item/stack/tile/bamboo, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ null, \ + new /datum/stack_recipe("bamboo platform", /obj/structure/platform/bamboo, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ new/datum/stack_recipe_list("bamboo benches", list( new /datum/stack_recipe("bamboo bench (middle)", /obj/structure/chair/sofa/bamboo, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), new /datum/stack_recipe("bamboo bench (left)", /obj/structure/chair/sofa/bamboo/left, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), @@ -741,6 +750,7 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("wall gear", /obj/structure/girder/bronze, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new /datum/stack_recipe("clockwork platform", /obj/structure/platform/bronze, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ null, new/datum/stack_recipe("directional bronze window", /obj/structure/window/bronze/unanchored, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ new/datum/stack_recipe("fulltile bronze window", /obj/structure/window/bronze/fulltile/unanchored, 2, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ @@ -894,8 +904,10 @@ GLOBAL_LIST_INIT(plastic_recipes, list( . += GLOB.plastic_recipes GLOBAL_LIST_INIT(paperframe_recipes, list( -new /datum/stack_recipe("paper frame separator", /obj/structure/window/paperframe, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, time = 1 SECONDS), \ -new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperframe, 3, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, time = 1 SECONDS ))) + new /datum/stack_recipe("paper frame separator", /obj/structure/window/paperframe, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, time = 1 SECONDS), \ + new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperframe, 3, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, time = 1 SECONDS ), \ + new /datum/stack_recipe("paper frame platform", /obj/structure/platform/paper, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ +)) /obj/item/stack/sheet/paperframes name = "paper frames" @@ -941,6 +953,10 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra /obj/item/stack/sheet/meat/five amount = 5 +GLOBAL_LIST_INIT(pizza_sheet_recipes, list( + new/datum/stack_recipe("huge pizza", /obj/structure/platform/pizza, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ +)) + /obj/item/stack/sheet/pizza name = "sheet pizza" desc = "It's a deliciously rectangular sheet of pizza!" @@ -953,6 +969,10 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra drop_sound = null pickup_sound = null +/obj/item/stack/sheet/pizza/get_main_recipes() + . = ..() + . += GLOB.pizza_sheet_recipes + /obj/item/stack/sheet/pizza/fifty amount = 50 /obj/item/stack/sheet/pizza/twenty diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index cb17660382f..deb8c450ca0 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -41,6 +41,7 @@ /obj/structure/closet/crate/Initialize(mapload) AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0) //add element in closed state before parent init opens it(if it does) if(elevation) + AddComponent(/datum/component/climb_walkable) AddElement(/datum/element/elevation, pixel_shift = elevation) . = ..() diff --git a/code/game/objects/structures/platform.dm b/code/game/objects/structures/platform.dm new file mode 100644 index 00000000000..48e1e2b78c7 --- /dev/null +++ b/code/game/objects/structures/platform.dm @@ -0,0 +1,276 @@ +#define PLATFORM_BASE_MATERIAL_AMOUNT 2000 + +/// A raised platform you can stand on top of +/obj/structure/platform + name = "platform" + desc = "A raised platform which can make you slightly taller." + icon = 'icons/obj/smooth_structures/platform/window_frame_normal.dmi' + icon_state = "window_frame_normal-0" + base_icon_state = "window_frame_normal" + smoothing_flags = SMOOTH_BITMASK|SMOOTH_OBJ + smoothing_groups = SMOOTH_GROUP_PLATFORMS + canSmoothWith = SMOOTH_GROUP_PLATFORMS + pass_flags_self = PASSTABLE | LETPASSTHROW | PASSGRILLE | PASSWINDOW + opacity = FALSE + density = TRUE + rad_insulation = null + max_integrity = 50 + anchored = TRUE + armor_type = /datum/armor/half_wall + material_flags = MATERIAL_EFFECTS | MATERIAL_AFFECT_STATISTICS + /// Icon used for the frame + var/frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.dmi' + /// Material used in our construction + var/sheet_type = /obj/item/stack/sheet/iron + /// Count of sheets used in our construction + var/sheet_amount = 2 + /// What footstep do we use? + var/footstep = FOOTSTEP_FLOOR + /// Traits to give people who have clambered onto our tile + var/static/list/turf_traits = list(TRAIT_TURF_IGNORE_SLOWDOWN, TRAIT_TURF_IGNORE_SLIPPERY, TRAIT_IMMERSE_STOPPED) + +/datum/armor/half_wall + melee = 50 + bullet = 70 + laser = 70 + energy = 100 + bomb = 10 + bio = 100 + fire = 0 + acid = 0 + +/obj/structure/platform/Initialize(mapload) + . = ..() + + register_context() + update_appearance(UPDATE_OVERLAYS) + AddComponent(/datum/component/climb_walkable) + AddElement(/datum/element/climbable) + AddElement(/datum/element/elevation, pixel_shift = 12) + AddElement(/datum/element/give_turf_traits, string_list(turf_traits)) + AddElement(/datum/element/footstep_override, footstep = footstep, priority = STEP_SOUND_TABLE_PRIORITY) + AddComponent(/datum/component/table_smash) + +/obj/structure/platform/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + . = ..() + + if(isnull(held_item)) + return NONE + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_RMB] = "Disassemble" + . = CONTEXTUAL_SCREENTIP_SET + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_RMB] = "Deconstruct" + . = CONTEXTUAL_SCREENTIP_SET + + return . || NONE + +/obj/structure/platform/screwdriver_act_secondary(mob/living/user, obj/item/tool) + to_chat(user, span_notice("You start disassembling [src]...")) + if(tool.use_tool(src, user, 2 SECONDS, volume=50)) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/platform/wrench_act_secondary(mob/living/user, obj/item/tool) + to_chat(user, span_notice("You start deconstructing [src]...")) + if(tool.use_tool(src, user, 4 SECONDS, volume=50)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/platform/update_overlays() + . = ..() + if (frame_icon) + . += mutable_appearance(frame_icon, "[base_icon_state]-[smoothing_junction]", appearance_flags = KEEP_APART) + +/obj/structure/platform/set_smoothed_icon_state(new_junction) + . = ..() + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/platform/atom_deconstruct(disassembled = TRUE) + var/turf/target_turf = drop_location() + if(sheet_type) + new sheet_type(target_turf, sheet_amount) + else + for(var/datum/material/mat in custom_materials) + new mat.sheet_type(target_turf, FLOOR(custom_materials[mat] / SHEET_MATERIAL_AMOUNT, 1)) + +/obj/structure/platform/rusty + icon = 'icons/obj/smooth_structures/platform/window_frame_rusty.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.dmi' + icon_state = "window_frame_rusty-0" + base_icon_state = "window_frame_rusty" + +// Shuttle themed + +/obj/structure/platform/titanium + icon = 'icons/obj/smooth_structures/platform/window_frame_shuttle.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.dmi' + icon_state = "window_frame_shuttle-0" + base_icon_state = "window_frame_shuttle" + sheet_type = /obj/item/stack/sheet/mineral/titanium + custom_materials = list(/datum/material/titanium = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_SHUTTLE + canSmoothWith = SMOOTH_GROUP_PLATFORMS_SHUTTLE + +/obj/structure/platform/plastitanium + icon = 'icons/obj/smooth_structures/platform/window_frame_plastitanium.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.dmi' + icon_state = "window_frame_plastitanium-0" + base_icon_state = "window_frame_plastitanium" + sheet_type = /obj/item/stack/sheet/mineral/plastitanium + custom_materials = list(/datum/material/alloy/plastitanium = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_SHUTTLE + canSmoothWith = SMOOTH_GROUP_PLATFORMS_SHUTTLE + +// Metallic material themed + +/obj/structure/platform/material + icon = 'icons/obj/smooth_structures/platform/window_frame_material.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_material.dmi' + icon_state = "window_frame_material-0" + base_icon_state = "window_frame_material" + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + smoothing_groups = SMOOTH_GROUP_PLATFORMS_MATERIAL + canSmoothWith = SMOOTH_GROUP_PLATFORMS_MATERIAL + +/obj/structure/platform/iron + name = "rough iron platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_iron.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.dmi' + icon_state = "window_frame_iron-0" + base_icon_state = "window_frame_iron" + sheet_type = /obj/item/stack/sheet/iron + custom_materials = list(/datum/material/iron = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_MATERIAL + canSmoothWith = SMOOTH_GROUP_PLATFORMS_MATERIAL + +/obj/structure/platform/silver + name = "silver platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_silver.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.dmi' + icon_state = "window_frame_silver-0" + base_icon_state = "window_frame_silver" + sheet_type = /obj/item/stack/sheet/mineral/silver + custom_materials = list(/datum/material/silver = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_MATERIAL + canSmoothWith = SMOOTH_GROUP_PLATFORMS_MATERIAL + +/obj/structure/platform/gold + name = "golden platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_gold.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.dmi' + icon_state = "window_frame_gold-0" + base_icon_state = "window_frame_gold" + sheet_type = /obj/item/stack/sheet/mineral/gold + custom_materials = list(/datum/material/gold = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_MATERIAL + canSmoothWith = SMOOTH_GROUP_PLATFORMS_MATERIAL + +/obj/structure/platform/bronze + name = "clockwork platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_bronze.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.dmi' + icon_state = "window_frame_bronze-0" + base_icon_state = "window_frame_bronze" + sheet_type = /obj/item/stack/sheet/bronze + custom_materials = list(/datum/material/bronze = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_MATERIAL + canSmoothWith = SMOOTH_GROUP_PLATFORMS_MATERIAL + +/obj/structure/platform/uranium + name = "depleted uranium platform" + desc = "A heavy duty platform, thankfully not radioactive." + icon = 'icons/obj/smooth_structures/platform/window_frame_uranium.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.dmi' + icon_state = "window_frame_uranium-0" + base_icon_state = "window_frame_uranium" + material_flags = NONE + sheet_type = /obj/item/stack/sheet/mineral/uranium + custom_materials = list(/datum/material/uranium = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_MATERIAL + canSmoothWith = SMOOTH_GROUP_PLATFORMS_MATERIAL + +// Wooden themed + +/obj/structure/platform/wood + name = "wooden platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_wood.dmi' + frame_icon = null + icon_state = "window_frame_wood-0" + base_icon_state = "window_frame_wood" + sheet_type = /obj/item/stack/sheet/mineral/wood + custom_materials = list(/datum/material/wood = PLATFORM_BASE_MATERIAL_AMOUNT) + footstep = FOOTSTEP_WOOD + smoothing_groups = SMOOTH_GROUP_PLATFORMS_WOOD + canSmoothWith = SMOOTH_GROUP_PLATFORMS_WOOD + +/obj/structure/platform/wood/stage + name = "wooden stage" + desc = "A raised platform you can perform upon." + icon = 'icons/obj/smooth_structures/platform/window_frame_hotel.dmi' + icon_state = "window_frame_hotel-0" + base_icon_state = "window_frame_hotel" + +/obj/structure/platform/bamboo + name = "bamboo platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_bamboo.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.dmi' + icon_state = "window_frame_bamboo-0" + base_icon_state = "window_frame_bamboo" + sheet_type = /obj/item/stack/sheet/mineral/bamboo + custom_materials = list(/datum/material/bamboo = PLATFORM_BASE_MATERIAL_AMOUNT) + footstep = FOOTSTEP_WOOD + smoothing_groups = SMOOTH_GROUP_PLATFORMS_WOOD + canSmoothWith = SMOOTH_GROUP_PLATFORMS_WOOD + +// Misc + +/obj/structure/platform/sandstone + name = "stone platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_sandstone.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.dmi' + icon_state = "window_frame_sandstone-0" + base_icon_state = "window_frame_sandstone" + sheet_type = /obj/item/stack/sheet/mineral/sandstone + custom_materials = list(/datum/material/sandstone = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_STONE + canSmoothWith = SMOOTH_GROUP_PLATFORMS_STONE + +/obj/structure/platform/cult + name = "runed stone platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_cult.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.dmi' + icon_state = "window_frame_cult-0" + base_icon_state = "window_frame_cult" + sheet_type = /datum/material/runedmetal + custom_materials = list(/datum/material/runedmetal = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_STONE + canSmoothWith = SMOOTH_GROUP_PLATFORMS_STONE + +/obj/structure/platform/pizza + name = "huge pizza" + desc = "Big enough to stand on, although possibly you shouldn't eat it after that." + icon = 'icons/obj/smooth_structures/platform/window_frame_pizza.dmi' + frame_icon = null + icon_state = "window_frame_pizza-0" + base_icon_state = "window_frame_pizza" + custom_materials = list(/datum/material/pizza = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_PIZZA + canSmoothWith = SMOOTH_GROUP_PLATFORMS_PIZZA + footstep = FOOTSTEP_MEAT + +/obj/structure/platform/paper + name = "japanese platform" + icon = 'icons/obj/smooth_structures/platform/window_frame_paperframe.dmi' + frame_icon = 'icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.dmi' + icon_state = "window_frame_paperframe-0" + base_icon_state = "window_frame_paperframe" + sheet_type = /obj/item/stack/sheet/paperframes + custom_materials = list(/datum/material/paper = PLATFORM_BASE_MATERIAL_AMOUNT) + smoothing_groups = SMOOTH_GROUP_PLATFORMS_PAPER + canSmoothWith = SMOOTH_GROUP_PLATFORMS_PAPER + footstep = FOOTSTEP_WOOD + +#undef PLATFORM_BASE_MATERIAL_AMOUNT diff --git a/code/game/objects/structures/steps.dm b/code/game/objects/structures/steps.dm new file mode 100644 index 00000000000..a8e27e0b21a --- /dev/null +++ b/code/game/objects/structures/steps.dm @@ -0,0 +1,58 @@ +/// Short stairs you can use to climb tables quickly +/obj/structure/steps + name = "steps" + desc = "A small set of steps you can use to reach high shelves or climb onto platforms, just watch your ankles." + icon = 'icons/obj/small_stairs.dmi' + icon_state = "iron" + anchored = TRUE + move_resist = INFINITY + +/obj/structure/steps/Initialize(mapload) + . = ..() + + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_enter), + ) + + AddElement(/datum/element/connect_loc, loc_connections) + AddComponent(/datum/component/climb_walkable) + AddComponent(/datum/component/simple_rotation) + register_context() + +/obj/structure/steps/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(!held_item) + return NONE + + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = anchored ? "Unsecure" : "Secure" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + +/obj/structure/steps/wrench_act(mob/living/user, obj/item/tool) + default_unfasten_wrench(user, tool) + return ITEM_INTERACT_SUCCESS + +/obj/structure/steps/screwdriver_act(mob/living/user, obj/item/tool) + to_chat(user, span_notice("You start disassembling [src]...")) + if(tool.use_tool(src, user, 2 SECONDS, volume=50)) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/steps/atom_deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/iron(drop_location(), 2) + +/// Watch your ankles +/obj/structure/steps/proc/on_enter(turf/our_turf, mob/living/arrived, turf/old_loc, list/atom/old_locs) + SIGNAL_HANDLER + if (!isliving(arrived) || !isturf(old_loc) || !our_turf.Adjacent(old_loc) || !has_gravity(src) || HAS_TRAIT(arrived, TRAIT_MOB_ELEVATED) || (arrived.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || arrived.move_intent != MOVE_INTENT_RUN) + return + var/entered_dir = get_dir(our_turf, old_loc) + if (entered_dir == dir) + arrived.Knockdown(1 SECONDS) + to_chat(arrived, span_warning("You tripped over \the [src]!")) + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/steps, 0) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index e0893cb6847..b52ac33c5ee 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -50,6 +50,8 @@ var/use_matrices_instead = FALSE /// Matrix to return to on unflipping table var/matrix/before_flipped_matrix + /// Do we place people onto the table rather than slamming them? + var/slam_gently = FALSE /obj/structure/table/Initialize(mapload, obj/structure/table_frame/frame_used, obj/item/stack/stack_used) . = ..() @@ -62,7 +64,6 @@ on_init_smoothed_vars = list(smoothing_groups, canSmoothWith) var/static/list/loc_connections = list( - COMSIG_LIVING_DISARM_COLLIDE = PROC_REF(table_living), COMSIG_ATOM_EXIT = PROC_REF(on_exit), ) @@ -82,8 +83,13 @@ return make_climbable() - AddElement(/datum/element/give_turf_traits, turf_traits) + AddElement(/datum/element/give_turf_traits, string_list(turf_traits)) AddElement(/datum/element/footstep_override, priority = STEP_SOUND_TABLE_PRIORITY) + AddComponent(/datum/component/table_smash, gentle_push = slam_gently, after_smash = CALLBACK(src, PROC_REF(after_smash))) + +/// Called after someone is harmfully smashed into us +/obj/structure/table/proc/after_smash(mob/living/smashed) + return // This is mostly for our children /// Applies additional properties based on the frame used to construct this table. /obj/structure/table/proc/apply_frame_properties(obj/structure/table_frame/frame_used) @@ -97,6 +103,7 @@ ///Adds the element used to make the object climbable, and also the one that shift the mob buckled to it up. /obj/structure/table/proc/make_climbable() + AddComponent(/datum/component/climb_walkable) AddElement(/datum/element/climbable) AddElement(/datum/element/elevation, pixel_shift = 12) @@ -123,6 +130,7 @@ //proc that removes elements present in now-flipped tables /obj/structure/table/proc/flip_table(new_dir = SOUTH) playsound(src, 'sound/items/trayhit/trayhit1.ogg', 100) + qdel(GetComponent(/datum/component/climb_walkable)) RemoveElement(/datum/element/climbable) RemoveElement(/datum/element/footstep_override, priority = STEP_SOUND_TABLE_PRIORITY) RemoveElement(/datum/element/give_turf_traits, turf_traits) @@ -242,6 +250,7 @@ return FALSE if(border_dir == dir) return FALSE + return TRUE /obj/structure/table/update_icon(updates=ALL) @@ -261,38 +270,6 @@ /obj/structure/table/attack_hand(mob/living/user, list/modifiers) if(is_flipped) return - if(Adjacent(user) && user.pulling) - if(isliving(user.pulling)) - var/mob/living/pushed_mob = user.pulling - if(pushed_mob.buckled) - if(pushed_mob.buckled == src) - //Already buckled to the table, you probably meant to unbuckle them - return ..() - to_chat(user, span_warning("[pushed_mob] is buckled to [pushed_mob.buckled]!")) - return - if(user.combat_mode) - switch(user.grab_state) - if(GRAB_PASSIVE) - to_chat(user, span_warning("You need a better grip to do that!")) - return - if(GRAB_AGGRESSIVE) - tablepush(user, pushed_mob) - if(GRAB_NECK to GRAB_KILL) - tablelimbsmash(user, pushed_mob) - else - pushed_mob.visible_message(span_notice("[user] begins to place [pushed_mob] onto [src]..."), \ - span_userdanger("[user] begins to place [pushed_mob] onto [src]...")) - if(do_after(user, 3.5 SECONDS, target = pushed_mob)) - tableplace(user, pushed_mob) - else - return - user.stop_pulling() - else if(user.pulling.pass_flags & PASSTABLE) - user.Move_Pulled(src) - if (user.pulling.loc == loc) - user.visible_message(span_notice("[user] places [user.pulling] onto [src]."), - span_notice("You place [user.pulling] onto [src].")) - user.stop_pulling() return ..() /obj/structure/table/attack_hand_secondary(mob/user, list/modifiers) @@ -332,16 +309,6 @@ /obj/structure/table/attack_tk(mob/user) return -/obj/structure/table/CanAllowThrough(atom/movable/mover, border_dir) - . = ..() - if(.) - return - if(mover.throwing) - return TRUE - for(var/obj/structure/table/table in get_turf(mover)) - if(!table.is_flipped) - return TRUE - /obj/structure/table/CanAStarPass(to_dir, datum/can_pass_info/pass_info) if(!density) return TRUE @@ -349,52 +316,6 @@ return TRUE return FALSE -/obj/structure/table/proc/tableplace(mob/living/user, mob/living/pushed_mob) - pushed_mob.forceMove(loc) - pushed_mob.set_resting(TRUE, TRUE) - pushed_mob.visible_message(span_notice("[user] places [pushed_mob] onto [src]."), \ - span_notice("[user] places [pushed_mob] onto [src].")) - log_combat(user, pushed_mob, "places", null, "onto [src]") - -/obj/structure/table/proc/tablepush(mob/living/user, mob/living/pushed_mob) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, span_danger("Throwing [pushed_mob] onto the table might hurt them!")) - return - var/passtable_key = REF(user) - passtable_on(pushed_mob, passtable_key) - for (var/obj/obj in user.loc.contents) - if(!obj.CanAllowThrough(pushed_mob)) - return - pushed_mob.Move(src.loc) - passtable_off(pushed_mob, passtable_key) - if(pushed_mob.loc != loc) //Something prevented the tabling - return - pushed_mob.Knockdown(30) - pushed_mob.apply_damage(10, BRUTE) - pushed_mob.apply_damage(40, STAMINA) - playsound(pushed_mob, 'sound/effects/tableslam.ogg', 90, TRUE) - pushed_mob.visible_message(span_danger("[user] slams [pushed_mob] onto \the [src]!"), \ - span_userdanger("[user] slams you onto \the [src]!")) - log_combat(user, pushed_mob, "tabled", null, "onto [src]") - pushed_mob.add_mood_event("table", /datum/mood_event/table) - SEND_SIGNAL(user, COMSIG_LIVING_TABLE_SLAMMING, pushed_mob, src) - -/obj/structure/table/proc/tablelimbsmash(mob/living/user, mob/living/pushed_mob) - pushed_mob.Knockdown(30) - var/obj/item/bodypart/banged_limb = pushed_mob.get_bodypart(user.zone_selected) || pushed_mob.get_bodypart(BODY_ZONE_HEAD) - var/extra_wound = 0 - if(HAS_TRAIT(user, TRAIT_HULK)) - extra_wound = 20 - pushed_mob.apply_damage(30, BRUTE, banged_limb, wound_bonus = extra_wound) - pushed_mob.apply_damage(60, STAMINA) - take_damage(50) - playsound(pushed_mob, 'sound/effects/bang.ogg', 90, TRUE) - pushed_mob.visible_message(span_danger("[user] smashes [pushed_mob]'s [banged_limb.plaintext_zone] against \the [src]!"), - span_userdanger("[user] smashes your [banged_limb.plaintext_zone] against \the [src]")) - log_combat(user, pushed_mob, "head slammed", null, "against [src]") - pushed_mob.add_mood_event("table", /datum/mood_event/table_limbsmash, banged_limb) - SEND_SIGNAL(user, COMSIG_LIVING_TABLE_LIMB_SLAMMING, pushed_mob, src) - /obj/structure/table/screwdriver_act_secondary(mob/living/user, obj/item/tool) if(!deconstruction_ready) return NONE @@ -426,8 +347,6 @@ . = deck_act(user, tool, modifiers, !!LAZYACCESS(modifiers, RIGHT_CLICK)) if(istype(tool, /obj/item/storage/bag/tray)) . = tray_act(user, tool) - else if(istype(tool, /obj/item/riding_offhand)) - . = riding_offhand_act(user, tool) // Continue to placing if we don't do anything else if(.) @@ -459,37 +378,6 @@ card.Flip() return table_place_act(user, card, modifiers) -/obj/structure/table/proc/riding_offhand_act(mob/living/user, obj/item/riding_offhand/riding_item) - var/mob/living/carried_mob = riding_item.rider - if(carried_mob == user) //Piggyback user. - return NONE - - if(user.combat_mode) - user.unbuckle_mob(carried_mob) - tablelimbsmash(user, carried_mob) - return ITEM_INTERACT_SUCCESS - - var/tableplace_delay = 3.5 SECONDS - var/skills_space = "" - if(HAS_TRAIT(user, TRAIT_QUICKER_CARRY)) - tableplace_delay = 2 SECONDS - skills_space = " expertly" - else if(HAS_TRAIT(user, TRAIT_QUICK_CARRY)) - tableplace_delay = 2.75 SECONDS - skills_space = " quickly" - - var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE) - if(istype(potential_spine)) - tableplace_delay *= potential_spine.athletics_boost_multiplier - - carried_mob.visible_message(span_notice("[user] begins to[skills_space] place [carried_mob] onto [src]..."), - span_userdanger("[user] begins to[skills_space] place [carried_mob] onto [src]...")) - if(!do_after(user, tableplace_delay, target = carried_mob)) - return ITEM_INTERACT_BLOCKING - user.unbuckle_mob(carried_mob) - tableplace(user, carried_mob) - return ITEM_INTERACT_SUCCESS - // Where putting things on tables is handled. /obj/structure/table/proc/table_place_act(mob/living/user, obj/item/tool, list/modifiers) if(tool.item_flags & ABSTRACT) @@ -535,18 +423,6 @@ return TRUE return FALSE -/obj/structure/table/proc/table_living(datum/source, mob/living/shover, mob/living/target, shove_flags, obj/item/weapon) - SIGNAL_HANDLER - if((shove_flags & SHOVE_KNOCKDOWN_BLOCKED) || !(shove_flags & SHOVE_BLOCKED)) - return - target.Knockdown(SHOVE_KNOCKDOWN_TABLE, daze_amount = 3 SECONDS) - target.visible_message(span_danger("[shover.name] shoves [target.name] onto \the [src]!"), - span_userdanger("You're shoved onto \the [src] by [shover.name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, shover) - to_chat(shover, span_danger("You shove [target.name] onto \the [src]!")) - target.throw_at(src, 1, 1, null, FALSE) //1 speed throws with no spin are basically just forcemoves with a hard collision check - log_combat(shover, target, "shoved", "onto [src] (table)[weapon ? " with [weapon]" : ""]") - return COMSIG_LIVING_SHOVE_HANDLED - /obj/structure/table/greyscale icon = 'icons/obj/smooth_structures/table_greyscale.dmi' icon_state = "table_greyscale-0" @@ -746,31 +622,18 @@ smoothing_groups = SMOOTH_GROUP_WOOD_TABLES //Don't smooth with SMOOTH_GROUP_TABLES canSmoothWith = SMOOTH_GROUP_WOOD_TABLES -/obj/structure/table/wood/table_living(datum/source, mob/living/shover, mob/living/target, shove_flags, obj/item/weapon) - . = ..() - if(prob(33)) - wood_table_shatter(target) - -/obj/structure/table/wood/tablepush(mob/living/user, mob/living/pushed_mob) - . = ..() - if(!QDELETED(src) && prob(33)) - wood_table_shatter(pushed_mob) - -/obj/structure/table/wood/tablelimbsmash(mob/living/user, mob/living/pushed_mob) - . = ..() - if(!QDELETED(src) && prob(33)) - wood_table_shatter(pushed_mob) - -/obj/structure/table/wood/proc/wood_table_shatter(mob/living/victim) +/obj/structure/table/wood/after_smash(mob/living/smashed) + if(QDELETED(src) || prob(66)) + return visible_message( span_warning("[src] smashes into bits!"), blind_message = span_hear("You hear the loud cracking of wood being split."), ) playsound(src, 'sound/effects/wounds/crack2.ogg', 50, TRUE) - victim.Knockdown(10 SECONDS) - victim.Paralyze(2 SECONDS) - victim.apply_damage(20, BRUTE) + smashed.Knockdown(10 SECONDS) + smashed.Paralyze(2 SECONDS) + smashed.apply_damage(20, BRUTE) deconstruct(FALSE) /obj/structure/table/wood/narsie_act(total_override = TRUE) @@ -981,8 +844,7 @@ canSmoothWith = SMOOTH_GROUP_BRONZE_TABLES can_flip = FALSE -/obj/structure/table/bronze/tablepush(mob/living/user, mob/living/pushed_mob) - ..() +/obj/structure/table/bronze/after_smash(mob/living/pushed_mob) playsound(src, 'sound/effects/magic/clockwork/fellowship_armory.ogg', 50, TRUE) /obj/structure/table/reinforced/rglass @@ -1041,6 +903,7 @@ buckle_lying = 90 custom_materials = list(/datum/material/silver = SHEET_MATERIAL_AMOUNT) can_flip = FALSE + slam_gently = TRUE /// Mob currently lying on the table var/mob/living/carbon/patient = null /// Operating computer we're linked to, to sync operations from @@ -1159,11 +1022,6 @@ /obj/structure/table/optable/make_climbable() AddElement(/datum/element/elevation, pixel_shift = 12) -/obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob) - pushed_mob.forceMove(loc) - pushed_mob.set_resting(TRUE, TRUE) - visible_message(span_notice("[user] lays [pushed_mob] on [src].")) - ///Align the mob with the table when buckled. /obj/structure/table/optable/post_buckle_mob(mob/living/buckled) buckled.add_offsets(type, z_add = 6) @@ -1562,3 +1420,4 @@ R.add_fingerprint(user) qdel(src) building = FALSE + diff --git a/icons/obj/small_stairs.dmi b/icons/obj/small_stairs.dmi new file mode 100644 index 00000000000..5cde1d55952 Binary files /dev/null and b/icons/obj/small_stairs.dmi differ diff --git a/icons/obj/smooth_structures/platform.zip b/icons/obj/smooth_structures/platform.zip new file mode 100644 index 00000000000..e9f7cbca52c Binary files /dev/null and b/icons/obj/smooth_structures/platform.zip differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.dmi new file mode 100644 index 00000000000..b07aebf4967 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.png new file mode 100644 index 00000000000..876c1db5ca6 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.png.toml new file mode 100644 index 00000000000..ca6044375c0 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bamboo.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_bamboo" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 33 + +[output_icon_size] +x = 32 +y = 33 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.dmi new file mode 100644 index 00000000000..4bf6a23c890 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.png new file mode 100644 index 00000000000..c25d2715918 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.png.toml new file mode 100644 index 00000000000..ef568da6ab2 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_bronze.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_bronze" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.dmi new file mode 100644 index 00000000000..a6418fe3652 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.png new file mode 100644 index 00000000000..71db4e2c1dd Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.png.toml new file mode 100644 index 00000000000..12914b352a1 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_cult.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_cult" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.dmi new file mode 100644 index 00000000000..f0c1c338ee8 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.png new file mode 100644 index 00000000000..cf30936712f Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.png.toml new file mode 100644 index 00000000000..4e6708939b4 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_gold.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_gold" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.dmi new file mode 100644 index 00000000000..0ac98eb154f Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.png new file mode 100644 index 00000000000..9d4287b0483 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.png.toml new file mode 100644 index 00000000000..f3ccff49148 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_iron.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_iron" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.dmi new file mode 100644 index 00000000000..bfbe726e236 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.png new file mode 100644 index 00000000000..89217a237b2 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.png.toml new file mode 100644 index 00000000000..7e11ef27392 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_material.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_material" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.dmi new file mode 100644 index 00000000000..8507239d520 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.png new file mode 100644 index 00000000000..567d2021545 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.png.toml new file mode 100644 index 00000000000..90dbfccbbcd --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_normal.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_normal" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.dmi new file mode 100644 index 00000000000..c4ff3814262 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.png new file mode 100644 index 00000000000..9b7d63b574f Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.png.toml new file mode 100644 index 00000000000..ee2a4a251e8 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_paperframe.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_paperframe" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.dmi new file mode 100644 index 00000000000..81953f9dac5 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.png new file mode 100644 index 00000000000..8b7ce42e937 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.png.toml new file mode 100644 index 00000000000..ee2a4a251e8 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_pizza.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_paperframe" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.dmi new file mode 100644 index 00000000000..a28964bcf53 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.png new file mode 100644 index 00000000000..627116c68ca Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.png.toml new file mode 100644 index 00000000000..722035c4576 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_plastitanium.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_plastitanium" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.dmi new file mode 100644 index 00000000000..1367f021c31 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.png new file mode 100644 index 00000000000..bea1ebe2491 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.png.toml new file mode 100644 index 00000000000..80f7eeffc4f --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_rusty.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_rusty" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.dmi new file mode 100644 index 00000000000..8cd96b5b21a Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.png new file mode 100644 index 00000000000..f6f71383248 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.png.toml new file mode 100644 index 00000000000..80f7eeffc4f --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_sandstone.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_rusty" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.dmi new file mode 100644 index 00000000000..91b65de73cb Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.png new file mode 100644 index 00000000000..f45007aa22d Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.png.toml new file mode 100644 index 00000000000..7b69b502b72 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_shuttle.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_shuttle" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.dmi new file mode 100644 index 00000000000..c58a9ecb928 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.png new file mode 100644 index 00000000000..d6b009a6ec3 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.png.toml new file mode 100644 index 00000000000..0785dc4d1c7 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_silver.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_silver" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 \ No newline at end of file diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.dmi b/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.dmi new file mode 100644 index 00000000000..fb366d32758 Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.dmi differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.png b/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.png new file mode 100644 index 00000000000..a893a1af60c Binary files /dev/null and b/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.png differ diff --git a/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.png.toml b/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.png.toml new file mode 100644 index 00000000000..7d811bf0c73 --- /dev/null +++ b/icons/obj/smooth_structures/platform/frame_faces/window_frame_uranium.png.toml @@ -0,0 +1,14 @@ +output_name = "window_frame_uranium" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 32 +y = 32 + +[output_icon_size] +x = 32 +y = 32 + +[cut_pos] +x = 16 +y = 16 diff --git a/icons/obj/smooth_structures/platform/window_frame_bamboo.dmi b/icons/obj/smooth_structures/platform/window_frame_bamboo.dmi new file mode 100644 index 00000000000..057857bc617 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_bamboo.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_bamboo.png b/icons/obj/smooth_structures/platform/window_frame_bamboo.png new file mode 100644 index 00000000000..2421367e201 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_bamboo.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_bamboo.png.toml b/icons/obj/smooth_structures/platform/window_frame_bamboo.png.toml new file mode 100644 index 00000000000..8e0b1399ea9 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_bamboo.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_bamboo" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_bronze.dmi b/icons/obj/smooth_structures/platform/window_frame_bronze.dmi new file mode 100644 index 00000000000..0d292873b62 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_bronze.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_bronze.png b/icons/obj/smooth_structures/platform/window_frame_bronze.png new file mode 100644 index 00000000000..9f3854b41ab Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_bronze.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_bronze.png.toml b/icons/obj/smooth_structures/platform/window_frame_bronze.png.toml new file mode 100644 index 00000000000..9a8326a93bc --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_bronze.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_bronze" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_cult.dmi b/icons/obj/smooth_structures/platform/window_frame_cult.dmi new file mode 100644 index 00000000000..b2ea411ee5c Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_cult.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_cult.png b/icons/obj/smooth_structures/platform/window_frame_cult.png new file mode 100644 index 00000000000..f4a2bee5ab4 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_cult.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_cult.png.toml b/icons/obj/smooth_structures/platform/window_frame_cult.png.toml new file mode 100644 index 00000000000..eb9c0659967 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_cult.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_cult" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_gold.dmi b/icons/obj/smooth_structures/platform/window_frame_gold.dmi new file mode 100644 index 00000000000..8c52de17622 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_gold.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_gold.png b/icons/obj/smooth_structures/platform/window_frame_gold.png new file mode 100644 index 00000000000..bb2ddee5676 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_gold.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_gold.png.toml b/icons/obj/smooth_structures/platform/window_frame_gold.png.toml new file mode 100644 index 00000000000..528983bb050 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_gold.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_gold" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_hotel.dmi b/icons/obj/smooth_structures/platform/window_frame_hotel.dmi new file mode 100644 index 00000000000..a703eb0e618 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_hotel.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_hotel.png b/icons/obj/smooth_structures/platform/window_frame_hotel.png new file mode 100644 index 00000000000..0759e2838bd Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_hotel.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_hotel.png.toml b/icons/obj/smooth_structures/platform/window_frame_hotel.png.toml new file mode 100644 index 00000000000..54e8ab3d84e --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_hotel.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_hotel" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_iron.dmi b/icons/obj/smooth_structures/platform/window_frame_iron.dmi new file mode 100644 index 00000000000..df111e908ff Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_iron.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_iron.png b/icons/obj/smooth_structures/platform/window_frame_iron.png new file mode 100644 index 00000000000..f4edf9ed549 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_iron.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_iron.png.toml b/icons/obj/smooth_structures/platform/window_frame_iron.png.toml new file mode 100644 index 00000000000..db015e176b9 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_iron.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_iron" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_material.dmi b/icons/obj/smooth_structures/platform/window_frame_material.dmi new file mode 100644 index 00000000000..15b65a7d526 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_material.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_material.png b/icons/obj/smooth_structures/platform/window_frame_material.png new file mode 100644 index 00000000000..f2a28f47549 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_material.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_material.png.toml b/icons/obj/smooth_structures/platform/window_frame_material.png.toml new file mode 100644 index 00000000000..4a19e2b0faf --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_material.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_material" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_normal.dmi b/icons/obj/smooth_structures/platform/window_frame_normal.dmi new file mode 100644 index 00000000000..0e874057c72 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_normal.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_normal.png b/icons/obj/smooth_structures/platform/window_frame_normal.png new file mode 100644 index 00000000000..5890f1cb474 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_normal.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_normal.png.toml b/icons/obj/smooth_structures/platform/window_frame_normal.png.toml new file mode 100644 index 00000000000..b66c79fe083 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_normal.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_normal" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_paperframe.dmi b/icons/obj/smooth_structures/platform/window_frame_paperframe.dmi new file mode 100644 index 00000000000..535f5850d13 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_paperframe.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_paperframe.png b/icons/obj/smooth_structures/platform/window_frame_paperframe.png new file mode 100644 index 00000000000..9d3452fe7db Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_paperframe.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_paperframe.png.toml b/icons/obj/smooth_structures/platform/window_frame_paperframe.png.toml new file mode 100644 index 00000000000..ef7ad65c2c1 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_paperframe.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_paperframe" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_pizza.dmi b/icons/obj/smooth_structures/platform/window_frame_pizza.dmi new file mode 100644 index 00000000000..32e72f906e2 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_pizza.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_pizza.png b/icons/obj/smooth_structures/platform/window_frame_pizza.png new file mode 100644 index 00000000000..d183ec51f9a Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_pizza.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_pizza.png.toml b/icons/obj/smooth_structures/platform/window_frame_pizza.png.toml new file mode 100644 index 00000000000..18f0004f488 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_pizza.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_pizza" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_plastitanium.dmi b/icons/obj/smooth_structures/platform/window_frame_plastitanium.dmi new file mode 100644 index 00000000000..3983ae03575 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_plastitanium.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_plastitanium.png b/icons/obj/smooth_structures/platform/window_frame_plastitanium.png new file mode 100644 index 00000000000..a1e849613fd Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_plastitanium.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_plastitanium.png.toml b/icons/obj/smooth_structures/platform/window_frame_plastitanium.png.toml new file mode 100644 index 00000000000..36cf38c5832 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_plastitanium.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_plastitanium" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_rusty.dmi b/icons/obj/smooth_structures/platform/window_frame_rusty.dmi new file mode 100644 index 00000000000..5c1b6e3d9d3 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_rusty.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_rusty.png b/icons/obj/smooth_structures/platform/window_frame_rusty.png new file mode 100644 index 00000000000..0ad7f39152f Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_rusty.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_rusty.png.toml b/icons/obj/smooth_structures/platform/window_frame_rusty.png.toml new file mode 100644 index 00000000000..fd608c6597c --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_rusty.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_rusty" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_sandstone.dmi b/icons/obj/smooth_structures/platform/window_frame_sandstone.dmi new file mode 100644 index 00000000000..7aa99478e67 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_sandstone.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_sandstone.png b/icons/obj/smooth_structures/platform/window_frame_sandstone.png new file mode 100644 index 00000000000..38c8afacaf4 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_sandstone.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_sandstone.png.toml b/icons/obj/smooth_structures/platform/window_frame_sandstone.png.toml new file mode 100644 index 00000000000..d79e404965b --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_sandstone.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_sandstone" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_shuttle.dmi b/icons/obj/smooth_structures/platform/window_frame_shuttle.dmi new file mode 100644 index 00000000000..f110d8eeb8c Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_shuttle.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_shuttle.png b/icons/obj/smooth_structures/platform/window_frame_shuttle.png new file mode 100644 index 00000000000..1334ccaed5d Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_shuttle.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_shuttle.png.toml b/icons/obj/smooth_structures/platform/window_frame_shuttle.png.toml new file mode 100644 index 00000000000..8f1ebaabb6b --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_shuttle.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_shuttle" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_silver.dmi b/icons/obj/smooth_structures/platform/window_frame_silver.dmi new file mode 100644 index 00000000000..c2bcfd8efae Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_silver.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_silver.png b/icons/obj/smooth_structures/platform/window_frame_silver.png new file mode 100644 index 00000000000..24a0a70fc99 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_silver.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_silver.png.toml b/icons/obj/smooth_structures/platform/window_frame_silver.png.toml new file mode 100644 index 00000000000..bdc754a95b2 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_silver.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_silver" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_uranium.dmi b/icons/obj/smooth_structures/platform/window_frame_uranium.dmi new file mode 100644 index 00000000000..ba0fd93334c Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_uranium.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_uranium.png b/icons/obj/smooth_structures/platform/window_frame_uranium.png new file mode 100644 index 00000000000..26f7a590e61 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_uranium.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_uranium.png.toml b/icons/obj/smooth_structures/platform/window_frame_uranium.png.toml new file mode 100644 index 00000000000..cbff8857a53 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_uranium.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_uranium" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/platform/window_frame_wood.dmi b/icons/obj/smooth_structures/platform/window_frame_wood.dmi new file mode 100644 index 00000000000..51b764311d7 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_wood.dmi differ diff --git a/icons/obj/smooth_structures/platform/window_frame_wood.png b/icons/obj/smooth_structures/platform/window_frame_wood.png new file mode 100644 index 00000000000..f067b729501 Binary files /dev/null and b/icons/obj/smooth_structures/platform/window_frame_wood.png differ diff --git a/icons/obj/smooth_structures/platform/window_frame_wood.png.toml b/icons/obj/smooth_structures/platform/window_frame_wood.png.toml new file mode 100644 index 00000000000..ce70ff74340 --- /dev/null +++ b/icons/obj/smooth_structures/platform/window_frame_wood.png.toml @@ -0,0 +1,2 @@ +output_name = "window_frame_wood" +template = "bitmask/diagonal_32x32.toml" diff --git a/tgstation.dme b/tgstation.dme index c50a5a27285..c8ceef82f31 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1249,6 +1249,7 @@ #include "code\datums\components\chuunibyou.dm" #include "code\datums\components\cleaner.dm" #include "code\datums\components\clickbox.dm" +#include "code\datums\components\climb_walkable.dm" #include "code\datums\components\clothing_dirt.dm" #include "code\datums\components\clothing_fov_visor.dm" #include "code\datums\components\codeword_hearing.dm" @@ -1442,6 +1443,7 @@ #include "code\datums\components\surgery_initiator.dm" #include "code\datums\components\swabbing.dm" #include "code\datums\components\swarming.dm" +#include "code\datums\components\table_smash.dm" #include "code\datums\components\tackle.dm" #include "code\datums\components\tactical.dm" #include "code\datums\components\takes_reagent_appearance.dm" @@ -2999,6 +3001,7 @@ #include "code\game\objects\structures\petrified_statue.dm" #include "code\game\objects\structures\pinatas.dm" #include "code\game\objects\structures\plasticflaps.dm" +#include "code\game\objects\structures\platform.dm" #include "code\game\objects\structures\railings.dm" #include "code\game\objects\structures\reflector.dm" #include "code\game\objects\structures\safe.dm" @@ -3008,6 +3011,7 @@ #include "code\game\objects\structures\spawner.dm" #include "code\game\objects\structures\spirit_board.dm" #include "code\game\objects\structures\stairs.dm" +#include "code\game\objects\structures\steps.dm" #include "code\game\objects\structures\table_frames.dm" #include "code\game\objects\structures\tables_racks.dm" #include "code\game\objects\structures\tank_dispenser.dm"