diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ad0c5e729f1..47f3981875a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -74,217 +74,6 @@ usr.visible_message("[src] points to [A]") return 1 -<<<<<<< HEAD -/*one proc, four uses -swapping: if it's 1, the mobs are trying to switch, if 0, non-passive is pushing passive -default behaviour is: - - non-passive mob passes the passive version - - passive mob checks to see if its mob_bump_flag is in the non-passive's mob_bump_flags - - if si, the proc returns -*/ -/mob/living/proc/can_move_mob(var/mob/living/swapped, swapping = 0, passive = 0) - if(!swapped) - return 1 - if(!passive) - return swapped.can_move_mob(src, swapping, 1) - else - var/context_flags = 0 - if(swapping) - context_flags = swapped.mob_swap_flags - else - context_flags = swapped.mob_push_flags - if(!mob_bump_flag) //nothing defined, go wild - return 1 - if(mob_bump_flag & context_flags) - return 1 - return 0 - -/mob/living/Bump(atom/movable/AM) - if(now_pushing || !loc || buckled == AM) - return - now_pushing = 1 - if (istype(AM, /mob/living)) - var/mob/living/tmob = AM - - //Even if we don't push/swap places, we "touched" them, so spread fire - spread_fire(tmob) - - for(var/mob/living/M in range(tmob, 1)) - if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) ) - if ( !(world.time % 5) ) - to_chat(src, "[tmob] is restrained, you cannot push past") - now_pushing = 0 - return - if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) ) - if ( !(world.time % 5) ) - to_chat(src, "[tmob] is restraining [M], you cannot push past") - now_pushing = 0 - return - - //BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller - var/can_swap = 1 - if(loc.density || tmob.loc.density) - can_swap = 0 - if(can_swap) - for(var/atom/movable/A in loc) - if(A == src) - continue - if(!A.CanPass(tmob, loc)) - can_swap = 0 - if(!can_swap) break - if(can_swap) - for(var/atom/movable/A in tmob.loc) - if(A == tmob) - continue - if(!A.CanPass(src, tmob.loc)) - can_swap = 0 - if(!can_swap) break - - //Leaping mobs just land on the tile, no pushing, no anything. - if(status_flags & LEAPING) - loc = tmob.loc - status_flags &= ~LEAPING - now_pushing = 0 - return - - if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && tmob.canmove && canmove && !tmob.buckled && !buckled && can_swap && can_move_mob(tmob, 1, 0)) // mutual brohugs all around! - var/turf/oldloc = loc - //VOREstation Edit - Begin - - //check bumpnom chance, if it's a simplemob that's doing the bumping - var/mob/living/simple_mob/srcsimp = src - if(istype(srcsimp)) - if(srcsimp.tryBumpNom(tmob)) - now_pushing = 0 - return - - //if it's a simplemob being bumped, and the above didn't make them start getting bumpnommed, they get a chance to bumpnom - var/mob/living/simple_mob/tmobsimp = tmob - if(istype(tmobsimp)) - if(tmobsimp.tryBumpNom(src)) - now_pushing = 0 - return - - //VOREstation Edit - End - forceMove(tmob.loc) - //VOREstation Edit - Begin - // In case of micros, we don't swap positions; instead occupying the same square! - if (handle_micro_bump_helping(tmob)) - now_pushing = 0 - return - // TODO - Check if we need to do something about the slime.UpdateFeed() we are skipping below. - // VOREStation Edit - End - tmob.forceMove(oldloc) - now_pushing = 0 - return - //VOREStation Edit - Begin - else if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && canmove && can_swap && handle_micro_bump_helping(tmob)) - forceMove(tmob.loc) - now_pushing = 0 - return - //VOREStation Edit - End - - if(!can_move_mob(tmob, 0, 0)) - now_pushing = 0 - return - if(a_intent == I_HELP || src.restrained()) - now_pushing = 0 - return - // VOREStation Edit - Begin - // Plow that nerd. - if(ishuman(tmob)) - var/mob/living/carbon/human/H = tmob - if(H.species.lightweight == 1 && prob(50)) - H.visible_message("[src] bumps into [H], knocking them off balance!") - H.Weaken(5) - now_pushing = 0 - return - // Handle grabbing, stomping, and such of micros! - if(handle_micro_bump_other(tmob)) return - // VOREStation Edit - End - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(40) && !(FAT in src.mutations)) - to_chat(src, "You fail to push [tmob]'s fat ass out of the way.") - now_pushing = 0 - return - if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot)) - if(prob(99)) - now_pushing = 0 - return - - if(tmob.l_hand && istype(tmob.l_hand, /obj/item/weapon/shield/riot)) - if(prob(99)) - now_pushing = 0 - return - if(!(tmob.status_flags & CANPUSH)) - now_pushing = 0 - return - - tmob.LAssailant = src - - now_pushing = 0 - . = ..() - if (!istype(AM, /atom/movable) || AM.anchored) - //VOREStation Edit - object-specific proc for running into things - if(((confused || is_blind()) && stat == CONSCIOUS && prob(50) && m_intent=="run") || flying) - AM.stumble_into(src) - //VOREStation Edit End - /* VOREStation Removal - See above - if(confused && prob(50) && m_intent=="run") - Weaken(2) - playsound(src, "punch", 25, 1, -1) - visible_message("[src] [pick("ran", "slammed")] into \the [AM]!") - src.apply_damage(5, BRUTE) - to_chat(src, "You just [pick("ran", "slammed")] into \the [AM]!") - */ // VOREStation Removal End - return - if (!now_pushing) - if(isobj(AM)) - var/obj/I = AM - if(!can_pull_size || can_pull_size < I.w_class) - return - now_pushing = 1 - - var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window)) - for(var/obj/structure/window/win in get_step(AM,t)) - now_pushing = 0 - return - var/turf/T = AM.loc - var/turf/T2 = get_step(AM,t) - if(!T2) // Map edge - now_pushing = 0 - return - var/move_time = movement_delay(loc, t) - move_time = DS2NEARESTTICK(move_time) - if(AM.Move(T2, t, move_time)) - Move(T, t, move_time) - if(ishuman(AM) && AM:grabbed_by) - for(var/obj/item/weapon/grab/G in AM:grabbed_by) - step(G:assailant, get_dir(G:assailant, AM)) - G.adjust_position() - now_pushing = 0 - -/mob/living/CanPass(atom/movable/mover, turf/target) - if(istype(mover, /obj/structure/blob) && faction == "blob") //Blobs should ignore things on their faction. - return TRUE - return ..() - -// Called when something steps onto us. This allows for mulebots and vehicles to run things over. <3 -/mob/living/Crossed(var/atom/movable/AM) // Transplanting this from /mob/living/carbon/human/Crossed() - if(AM == src || AM.is_incorporeal()) // We're not going to run over ourselves or ghosts - return - - if(istype(AM, /mob/living/bot/mulebot)) - var/mob/living/bot/mulebot/MB = AM - MB.runOver(src) - - if(istype(AM, /obj/vehicle)) - var/obj/vehicle/V = AM - V.RunOver(src) - -======= ->>>>>>> 47f71b2... Reworks stairs to be sensible (#7783) /mob/living/verb/succumb() set hidden = 1 if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 2c6eb346064..5782ca62472 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -94,10 +94,40 @@ default behaviour is: if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && tmob.canmove && canmove && !tmob.buckled && !buckled && can_swap && can_move_mob(tmob, 1, 0)) // mutual brohugs all around! var/turf/oldloc = loc + //VOREstation Edit - Begin + + //check bumpnom chance, if it's a simplemob that's doing the bumping + var/mob/living/simple_mob/srcsimp = src + if(istype(srcsimp)) + if(srcsimp.tryBumpNom(tmob)) + now_pushing = 0 + return + + //if it's a simplemob being bumped, and the above didn't make them start getting bumpnommed, they get a chance to bumpnom + var/mob/living/simple_mob/tmobsimp = tmob + if(istype(tmobsimp)) + if(tmobsimp.tryBumpNom(src)) + now_pushing = 0 + return + + //VOREstation Edit - End forceMove(tmob.loc) + //VOREstation Edit - Begin + // In case of micros, we don't swap positions; instead occupying the same square! + if (handle_micro_bump_helping(tmob)) + now_pushing = 0 + return + // TODO - Check if we need to do something about the slime.UpdateFeed() we are skipping below. + // VOREStation Edit - End tmob.forceMove(oldloc) now_pushing = 0 return + //VOREStation Edit - Begin + else if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && canmove && can_swap && handle_micro_bump_helping(tmob)) + forceMove(tmob.loc) + now_pushing = 0 + return + //VOREStation Edit - End if(!can_move_mob(tmob, 0, 0)) now_pushing = 0 @@ -105,6 +135,18 @@ default behaviour is: if(a_intent == I_HELP || src.restrained()) now_pushing = 0 return + // VOREStation Edit - Begin + // Plow that nerd. + if(ishuman(tmob)) + var/mob/living/carbon/human/H = tmob + if(H.species.lightweight == 1 && prob(50)) + H.visible_message("[src] bumps into [H], knocking them off balance!") + H.Weaken(5) + now_pushing = 0 + return + // Handle grabbing, stomping, and such of micros! + if(handle_micro_bump_other(tmob)) return + // VOREStation Edit - End if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) if(prob(40) && !(FAT in src.mutations)) to_chat(src, "You fail to push [tmob]'s fat ass out of the way.") @@ -127,12 +169,18 @@ default behaviour is: now_pushing = 0 . = ..() if (!istype(AM, /atom/movable) || AM.anchored) + //VOREStation Edit - object-specific proc for running into things + if(((confused || is_blind()) && stat == CONSCIOUS && prob(50) && m_intent=="run") || flying) + AM.stumble_into(src) + //VOREStation Edit End + /* VOREStation Removal - See above if(confused && prob(50) && m_intent=="run") Weaken(2) playsound(src, "punch", 25, 1, -1) visible_message("[src] [pick("ran", "slammed")] into \the [AM]!") src.apply_damage(5, BRUTE) to_chat(src, "You just [pick("ran", "slammed")] into \the [AM]!") + */ // VOREStation Removal End return if (!now_pushing) if(isobj(AM)) diff --git a/code/modules/multiz/ladders.dm b/code/modules/multiz/ladders.dm index be04c7c46ef..cca3019543c 100644 --- a/code/modules/multiz/ladders.dm +++ b/code/modules/multiz/ladders.dm @@ -120,70 +120,4 @@ /obj/structure/ladder/updown allowed_directions = UP|DOWN -<<<<<<< HEAD:code/modules/multiz/structures.dm icon_state = "ladder11" - -/obj/structure/stairs - name = "Stairs" - desc = "Stairs leading to another deck. Not too useful if the gravity goes out." - icon = 'icons/obj/stairs.dmi' - density = 0 - opacity = 0 - anchored = 1 - flags = ON_BORDER - layer = STAIRS_LAYER - -/obj/structure/stairs/Initialize() - . = ..() - for(var/turf/turf in locs) - var/turf/simulated/open/above = GetAbove(turf) - if(!above) - warning("Stair created without level above: ([loc.x], [loc.y], [loc.z])") - return qdel(src) - if(!istype(above)) - above.ChangeTurf(/turf/simulated/open) - -/obj/structure/stairs/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) - if(get_dir(loc, target) == dir && upperStep(mover.loc)) - return FALSE - . = ..() - -/obj/structure/stairs/Bumped(atom/movable/A) - // This is hackish but whatever. - var/turf/target = get_step(GetAbove(A), dir) - if(target.Enter(A, src)) // Pass src to be ignored to avoid infinate loop - A.forceMove(target) - if(isliving(A)) - var/mob/living/L = A - if(L.pulling && !L.pulling.anchored) - L.pulling.forceMove(target) - -/obj/structure/stairs/proc/upperStep(var/turf/T) - return (T == loc) - -/obj/structure/stairs/CanPass(obj/mover, turf/source, height, airflow) - return airflow || !density - -// type paths to make mapping easier. -/obj/structure/stairs/north - dir = NORTH - bound_height = 64 - bound_y = -32 - pixel_y = -32 - -/obj/structure/stairs/south - dir = SOUTH - bound_height = 64 - -/obj/structure/stairs/east - dir = EAST - bound_width = 64 - bound_x = -32 - pixel_x = -32 - -/obj/structure/stairs/west - dir = WEST - bound_width = 64 -======= - icon_state = "ladder11" ->>>>>>> 47f71b2... Reworks stairs to be sensible (#7783):code/modules/multiz/ladders.dm diff --git a/code/modules/multiz/structures_vr.dm b/code/modules/multiz/ladders_vr.dm similarity index 100% rename from code/modules/multiz/structures_vr.dm rename to code/modules/multiz/ladders_vr.dm