diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm index 625dabbf280df..c75b46df1b934 100644 --- a/code/__defines/flags.dm +++ b/code/__defines/flags.dm @@ -22,6 +22,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define OBJ_FLAG_ANCHORABLE 0x0001 // This object can be stuck in place with a tool #define OBJ_FLAG_CONDUCTIBLE 0x0002 // Conducts electricity. (metal etc.) +#define OBJ_FLAG_TRIPPABLE 0x0003 // Objects like piping on the ground that can cause a trip #define MOB_FLAG_HOLY_BAD 0x001 // If this mob is allergic to holiness diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 8f97cedf08fce..a0e066e445622 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -160,4 +160,24 @@ ..() /obj/is_fluid_pushable(var/amt) - return ..() && w_class <= round(amt/20) \ No newline at end of file + return ..() && w_class <= round(amt/20) + +/obj/proc/trip_dir_check(mob/user as mob) + if(user.get_skill_value(SKILL_HAULING) >= SKILL_ADEPT) + return 0 + else if(obj_flags & OBJ_FLAG_TRIPPABLE) + return 1 + return 0 + +/obj/Crossed(mob/living/carbon/M as mob) + ..() + for(var/obj/structure/catwalk/C in get_turf(src)) + return + if(!ishuman(M) || !has_gravity(src) || M.resting || M.can_overcome_gravity() || M.move_intent.flags & MOVE_INTENT_DELIBERATE) + return + if(prob(40) && trip_dir_check(M)) + M.apply_damage(5,BRUTE) + M.slip(src, 6) + M.visible_message(\ + "[M.name] trips over \the [src]!",\ + "You trip over \the [src]!") diff --git a/code/modules/atmospherics/pipes.dm b/code/modules/atmospherics/pipes.dm index faf17845b519f..71c3b153d781b 100644 --- a/code/modules/atmospherics/pipes.dm +++ b/code/modules/atmospherics/pipes.dm @@ -17,6 +17,8 @@ buckle_lying = -1 var/datum/sound_token/sound_token + obj_flags = OBJ_FLAG_TRIPPABLE + /obj/machinery/atmospherics/pipe/drain_power() return -1 @@ -1433,6 +1435,14 @@ ..() update_icon() +/obj/machinery/atmospherics/pipe/trip_dir_check(mob/user as mob) + var/turf/T = src.loc + if(!T.is_plating()) + return 0 + if(initialize_directions & user.dir) + return 0 + . = ..() + /obj/machinery/atmospherics/proc/universal_underlays(var/obj/machinery/atmospherics/node, var/direction) var/turf/T = loc if(node) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 539b889e2cf10..400028e8a66e5 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -39,6 +39,8 @@ By design, d1 is the smallest direction and d2 is the highest color = COLOR_MAROON var/obj/machinery/power/breakerbox/breaker_box + obj_flags = OBJ_FLAG_TRIPPABLE + /obj/structure/cable/drain_power(var/drain_check, var/surge, var/amount = 0) @@ -461,6 +463,14 @@ obj/structure/cable/proc/cableColor(var/colorC) powernet = null // And finally null the powernet var. +/obj/structure/cable/trip_dir_check(mob/user as mob) + var/turf/T = src.loc + if(!T.is_plating()) + return 0 + if((user.dir == d1 || user.dir == d2)) + return 0 + . = ..() + /////////////////////////////////////////////// // The cable coil object, used for laying cable /////////////////////////////////////////////// diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index c2c410a668528..a21cbee4d2346 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -663,6 +663,8 @@ var/base_icon_state // initial icon state on map var/sortType = "" var/subtype = 0 + + obj_flags = OBJ_FLAG_TRIPPABLE // new pipe, set the icon_state as on map New() ..() @@ -959,6 +961,14 @@ /obj/structure/disposalpipe/hides_under_flooring() return 1 +/obj/structure/disposalpipe/trip_dir_check(mob/user as mob) + var/turf/T = src.loc + if(!T.is_plating()) + return 0 + if(dpdir & user.dir) + return 0 + . = ..() + // *** TEST verb //client/verb/dispstop() // for(var/obj/structure/disposalholder/H in world)