Merge pull request #1534 from Citadel-Station-13/SelectiveMirrorSync

Selective mirror sync
This commit is contained in:
LetterJay
2017-06-14 06:41:01 -05:00
committed by GitHub
104 changed files with 2272 additions and 1039 deletions
@@ -57,3 +57,13 @@
nutrition -= HUNGER_FACTOR/10
if((disabilities & FAT) && m_intent == MOVE_INTENT_RUN && bodytemperature <= 360)
bodytemperature += 2
/mob/living/carbon/Moved(oldLoc, Dir)
. = ..()
for(var/obj/O in internal_organs)
O.on_mob_move(dir, src, oldLoc)
/mob/living/carbon/setDir(newdir)
. = ..()
for(var/obj/O in internal_organs)
O.on_mob_turn(newdir, src)
@@ -1540,7 +1540,7 @@
if(stunning && stunCheck.stunned)
shouldFire = 0
if(shouldFire)
if(P.power_supply.charge <= 10) // can shoot seems to bug out for tasers, using this hacky method instead
if(P.cell.charge <= 10) // can shoot seems to bug out for tasers, using this hacky method instead
P.update_icon()
npcDrop(P,1)
else
@@ -6,17 +6,20 @@
/mob/living/carbon/human/Weaken(amount, updating = 1, ignore_canstun = 0)
amount = dna.species.spec_stun(src,amount)
return ..()
/mob/living/carbon/human/Paralyse(amount, updating = 1, ignore_canstun = 0)
amount = dna.species.spec_stun(src,amount)
return ..()
/mob/living/carbon/human/cure_husk()
. = ..()
if(.)
update_hair()
/mob/living/carbon/human/become_husk()
if(istype(dna.species, /datum/species/skeleton)) //skeletons shouldn't be husks.
cure_husk()
return
. = ..()
if(.)
update_hair()
@@ -97,6 +97,9 @@
buckle_lying = FALSE
can_ride_typecache = list(/mob/living/carbon/human)
/mob/living/silicon/robot/get_cell()
return cell
/mob/living/silicon/robot/Initialize(mapload)
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
@@ -56,7 +56,7 @@
add_fingerprint(user)
if(opened && !wiresexposed && !issilicon(user))
if(cell)
cell.updateicon()
cell.update_icon()
cell.add_fingerprint(user)
user.put_in_active_hand(cell)
to_chat(user, "<span class='notice'>You remove \the [cell].</span>")
@@ -104,10 +104,10 @@
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/wire)
else if(istype(S, /obj/item/stack/marker_beacon))
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)
else if(istype(S, /obj/item/stack/marker_beacon))
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)
if(S && S.source)
S.materials = list()
S.is_cyborg = 1
@@ -149,8 +149,8 @@
F.update_icon()
else if(istype(I, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = I
if(B.bcell)
B.bcell.charge = B.bcell.maxcharge
if(B.cell)
B.cell.charge = B.cell.maxcharge
else if(istype(I, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/EG = I
if(!EG.chambered)
@@ -202,9 +202,9 @@
/obj/item/weapon/robot_module/proc/do_transform_animation()
var/mob/living/silicon/robot/R = loc
R.notransform = TRUE
var/obj/effect/temp_visual/decoy/fading/fivesecond/ANM = new /obj/effect/temp_visual/decoy/fading/fivesecond(R.loc, R)
var/obj/effect/temp_visual/decoy/fading/fivesecond/ANM = new /obj/effect/temp_visual/decoy/fading/fivesecond(R.loc, R)
ANM.layer = R.layer - 0.01
new /obj/effect/temp_visual/small_smoke(R.loc)
new /obj/effect/temp_visual/small_smoke(R.loc)
if(R.hat)
R.hat.forceMove(get_turf(R))
R.hat = null
@@ -226,7 +226,7 @@
if(R.hud_used)
R.hud_used.update_robot_modules_display()
if(feedback_key && !did_feedback)
SSblackbox.inc(feedback_key, 1)
SSblackbox.inc(feedback_key, 1)
/obj/item/weapon/robot_module/standard
name = "Standard"
@@ -250,7 +250,7 @@
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg,
/obj/item/clockwork/ratvarian_spear/cyborg,
/obj/item/clockwork/clockwork_proselytizer/cyborg)
/obj/item/clockwork/replica_fabricator/cyborg)
moduleselect_icon = "standard"
feedback_key = "cyborg_standard"
hat_offset = -3
@@ -275,7 +275,7 @@
/obj/item/roller/robo,
/obj/item/borg/cyborghug/medical,
/obj/item/stack/medical/gauze/cyborg,
/obj/item/weapon/organ_storage,
/obj/item/weapon/organ_storage,
/obj/item/borg/lollipop)
emag_modules = list(/obj/item/weapon/reagent_containers/borghypo/hacked)
ratvar_modules = list(
@@ -314,7 +314,7 @@
emag_modules = list(/obj/item/borg/stun)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/engineer,
/obj/item/clockwork/clockwork_proselytizer/cyborg)
/obj/item/clockwork/replica_fabricator/cyborg)
cyborg_base_icon = "engineer"
moduleselect_icon = "engineer"
feedback_key = "cyborg_engineering"
@@ -395,9 +395,9 @@
..()
var/obj/item/weapon/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/weapon/gun/energy/e_gun/advtaser/cyborg) in basic_modules
if(T)
if(T.power_supply.charge < T.power_supply.maxcharge)
if(T.cell.charge < T.cell.maxcharge)
var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select]
T.power_supply.give(S.e_cost * coeff)
T.cell.give(S.e_cost * coeff)
T.update_icon()
else
T.charge_tick = 0
@@ -411,8 +411,8 @@
/obj/item/weapon/reagent_containers/borghypo/peace,
/obj/item/weapon/holosign_creator/cyborg,
/obj/item/borg/cyborghug/peacekeeper,
/obj/item/weapon/extinguisher,
/obj/item/borg/projectile_dampen)
/obj/item/weapon/extinguisher,
/obj/item/borg/projectile_dampen)
emag_modules = list(/obj/item/weapon/reagent_containers/borghypo/peace/hacked)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/peacekeeper,
@@ -444,7 +444,7 @@
emag_modules = list(/obj/item/weapon/reagent_containers/spray/cyborg_lube)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/janitor,
/obj/item/clockwork/clockwork_proselytizer/cyborg)
/obj/item/clockwork/replica_fabricator/cyborg)
cyborg_base_icon = "janitor"
moduleselect_icon = "janitor"
feedback_key = "cyborg_janitor"
@@ -542,8 +542,8 @@
/obj/item/weapon/storage/bag/sheetsnatcher/borg,
/obj/item/device/t_scanner/adv_mining_scanner,
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg,
/obj/item/device/gps/cyborg,
/obj/item/stack/marker_beacon)
/obj/item/device/gps/cyborg,
/obj/item/stack/marker_beacon)
emag_modules = list(/obj/item/borg/stun)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/miner,
@@ -639,8 +639,8 @@
max_energy = 2500
recharge_rate = 250
name = "Medical Synthesizer"
/datum/robot_energy_storage/beacon
max_energy = 30
recharge_rate = 1
name = "Marker Beacon Storage"
/datum/robot_energy_storage/beacon
max_energy = 30
recharge_rate = 1
name = "Marker Beacon Storage"
@@ -9,7 +9,7 @@
maxHealth = 100
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
obj_damage = 60
environment_smash = ENVIRONMENT_SMASH_WALLS //Walls can't stop THE LAW
environment_smash = ENVIRONMENT_SMASH_WALLS //Walls can't stop THE LAW
mob_size = MOB_SIZE_LARGE
radio_key = /obj/item/device/encryptionkey/headset_sec
@@ -358,21 +358,21 @@ Auto Patrol[]"},
var/obj/item/weapon/ed209_assembly/Sa = new /obj/item/weapon/ed209_assembly(Tsec)
Sa.build_step = 1
Sa.add_overlay("hs_hole")
Sa.add_overlay("hs_hole")
Sa.created_name = name
new /obj/item/device/assembly/prox_sensor(Tsec)
if(!lasercolor)
var/obj/item/weapon/gun/energy/e_gun/advtaser/G = new /obj/item/weapon/gun/energy/e_gun/advtaser(Tsec)
G.power_supply.charge = 0
G.cell.charge = 0
G.update_icon()
else if(lasercolor == "b")
var/obj/item/weapon/gun/energy/laser/bluetag/G = new /obj/item/weapon/gun/energy/laser/bluetag(Tsec)
G.power_supply.charge = 0
G.cell.charge = 0
G.update_icon()
else if(lasercolor == "r")
var/obj/item/weapon/gun/energy/laser/redtag/G = new /obj/item/weapon/gun/energy/laser/redtag(Tsec)
G.power_supply.charge = 0
G.cell.charge = 0
G.update_icon()
if(prob(50))
@@ -390,7 +390,7 @@ Auto Patrol[]"},
if(lasercolor == "r")
new /obj/item/clothing/suit/redtag(Tsec)
do_sparks(3, TRUE, src)
do_sparks(3, TRUE, src)
new /obj/effect/decal/cleanable/oil(loc)
..()
@@ -444,7 +444,7 @@ Auto Patrol[]"},
if(severity==2 && prob(70))
..(severity-1)
else
new /obj/effect/temp_visual/emp(loc)
new /obj/effect/temp_visual/emp(loc)
var/list/mob/living/carbon/targets = new
for(var/mob/living/carbon/C in view(12,src))
if(C.stat==2)
@@ -91,6 +91,16 @@
icon_living = icon_state
icon_dead = "[visualAppearence]_dead"
/obj/item/drone_shell/dusty
name = "derelict drone shell"
desc = "A long-forgotten drone shell. It seems kind of... Space Russian."
drone_type = /mob/living/simple_animal/drone/derelict
/mob/living/simple_animal/drone/derelict
name = "derelict drone"
default_hatmask = /obj/item/clothing/head/ushanka
/mob/living/simple_animal/drone/cogscarab
name = "cogscarab"
desc = "A strange, drone-like machine. It constantly emits the hum of gears."
@@ -120,14 +130,14 @@
hacked = TRUE
visualAppearence = CLOCKDRONE
can_be_held = FALSE
flavortext = "<span class='heavy_brass'>You are a cogscarab</span><b>, a clockwork creation of Ratvar. As a cogscarab, you have low health, an inbuilt proselytizer that can convert brass \
to liquified alloy, a set of relatively fast tools, </b><span class='heavy_brass'>can communicate over the Hierophant Network with :b</span><b>, and are immune to extreme \
flavortext = "<span class='heavy_brass'>You are a cogscarab</span><b>, a clockwork creation of Ratvar. As a cogscarab, you have low health, an inbuilt fabricator that can convert brass \
to power, a set of relatively fast tools, </b><span class='heavy_brass'>can communicate over the Hierophant Network with :b</span><b>, and are immune to extreme \
temperatures and pressures. \nYour goal is to serve the Justiciar and his servants by repairing and defending all they create.</b>"
/mob/living/simple_animal/drone/cogscarab/ratvar //a subtype for spawning when ratvar is alive, has a slab that it can use and a normal proselytizer
/mob/living/simple_animal/drone/cogscarab/ratvar //a subtype for spawning when ratvar is alive, has a slab that it can use and a normal fabricatorlab that it can use and a normal fabricator
default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar
/mob/living/simple_animal/drone/cogscarab/admin //an admin-only subtype of cogscarab with a no-cost proselytizer and slab in its box
/mob/living/simple_animal/drone/cogscarab/admin //an admin-only subtype of cogscarab with a no-cost fabricator and slab in its box
default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/admin
/mob/living/simple_animal/drone/cogscarab/Initialize()
@@ -167,9 +177,7 @@
..()
/mob/living/simple_animal/drone/cogscarab/can_use_guns(obj/item/weapon/gun/G)
if(!GLOB.ratvar_awakens)
changeNext_move(CLICK_CD_RANGE*4) //about as much delay as an unupgraded kinetic accelerator
return TRUE
return GLOB.ratvar_awakens
/mob/living/simple_animal/drone/cogscarab/get_armor_effectiveness()
if(GLOB.ratvar_awakens)
@@ -191,11 +199,41 @@
/mob/living/simple_animal/drone/cogscarab/ratvar_act()
fully_heal(TRUE)
/obj/item/drone_shell/dusty
name = "derelict drone shell"
desc = "A long-forgotten drone shell. It seems kind of... Space Russian."
drone_type = /mob/living/simple_animal/drone/derelict
/mob/living/simple_animal/drone/cogscarab/update_icons()
if(stat != DEAD)
if(incapacitated())
icon_state = "[visualAppearence]_flipped"
else
icon_state = visualAppearence
else
icon_state = "[visualAppearence]_dead"
/mob/living/simple_animal/drone/derelict
name = "derelict drone"
default_hatmask = /obj/item/clothing/head/ushanka
/mob/living/simple_animal/drone/cogscarab/Stun(amount, updating = 1, ignore_canstun = 0)
. = ..()
if(.)
update_icons()
/mob/living/simple_animal/drone/cogscarab/SetStunned(amount, updating = 1, ignore_canstun = 0)
. = ..()
if(.)
update_icons()
/mob/living/simple_animal/drone/cogscarab/AdjustStunned(amount, updating = 1, ignore_canstun = 0)
. = ..()
if(.)
update_icons()
/mob/living/simple_animal/drone/cogscarab/Weaken(amount, updating = 1, ignore_canweaken = 0)
. = ..()
if(.)
update_icons()
/mob/living/simple_animal/drone/cogscarab/SetWeakened(amount, updating = 1, ignore_canweaken = 0)
. = ..()
if(.)
update_icons()
/mob/living/simple_animal/drone/cogscarab/AdjustWeakened(amount, updating = 1, ignore_canweaken = 0)
. = ..()
if(.)
update_icons()
@@ -132,6 +132,12 @@ Difficulty: Hard
if(spawned_beacon && loc == spawned_beacon.loc && did_reset)
arena_trap(src)
/mob/living/simple_animal/hostile/megafauna/hierophant/CanAttack(atom/the_target)
. = ..()
if(istype(the_target, /mob/living/simple_animal/hostile/asteroid/hivelordbrood)) //ignore temporary targets in favor of more permenant targets
return FALSE
/mob/living/simple_animal/hostile/megafauna/hierophant/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
. = ..()
if(src && . > 0 && !blinking)
@@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
var/mob/living/creator = null // the creator
var/destroy_objects = 0
var/knockdown_people = 0
var/static/mutable_appearance/googly_eyes = mutable_appearance('icons/mob/mob.dmi', "googly_eyes")
var/static/mutable_appearance/googly_eyes = mutable_appearance('icons/mob/mob.dmi', "googly_eyes")
gold_core_spawnable = 0
/mob/living/simple_animal/hostile/mimic/copy/Initialize(mapload, obj/copy, mob/living/creator, destroy_original = 0)
@@ -203,7 +203,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
if(..())
emote_see = list("aims menacingly")
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE //needed? seems weird for them to do so
environment_smash = ENVIRONMENT_SMASH_NONE //needed? seems weird for them to do so
ranged = 1
retreat_distance = 1 //just enough to shoot
minimum_distance = 6
@@ -229,10 +229,10 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
/mob/living/simple_animal/hostile/mimic/copy/ranged/OpenFire(the_target)
if(Zapgun)
if(Zapgun.power_supply)
if(Zapgun.cell)
var/obj/item/ammo_casing/energy/shot = Zapgun.ammo_type[Zapgun.select]
if(Zapgun.power_supply.charge >= shot.e_cost)
Zapgun.power_supply.use(shot.e_cost)
if(Zapgun.cell.charge >= shot.e_cost)
Zapgun.cell.use(shot.e_cost)
Zapgun.update_icon()
..()
else if(Zapstick)
@@ -76,5 +76,9 @@
stat_attack = UNCONSCIOUS
movement_type = FLYING
robust_searching = 1
crusher_loot = /obj/item/crusher_trophy/watcher_wing
loot = list()
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
fromtendril = TRUE
@@ -85,11 +85,16 @@
icon_dead = "goliath_dead"
throw_message = "does nothing to the tough hide of the"
pre_attack_icon = "goliath2"
crusher_loot = /obj/item/crusher_trophy/goliath_tentacle
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
stat_attack = UNCONSCIOUS
robust_searching = 1
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
fromtendril = TRUE
//tentacles
/obj/effect/goliath_tentacle
name = "Goliath tentacle"
@@ -46,6 +46,10 @@
OpenFire()
return TRUE
/mob/living/simple_animal/hostile/asteroid/hivelord/spawn_crusher_loot()
loot += crusher_loot //we don't butcher
/mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed)
mouse_opacity = 1
..(gibbed)
@@ -101,6 +105,7 @@
speak_emote = list("echoes")
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "bounces harmlessly off of"
crusher_loot = /obj/item/crusher_trophy/legion_skull
loot = list(/obj/item/organ/regenerative_core/legion)
brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion
del_on_death = 1
@@ -119,6 +124,10 @@
new /obj/effect/mob_spawn/human/corpse/damaged(T)
..(gibbed)
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril
fromtendril = TRUE
//Legion skull
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion
name = "legion"
@@ -11,14 +11,21 @@
response_help = "pokes"
response_disarm = "shoves"
response_harm = "strikes"
var/crusher_loot
status_flags = 0
a_intent = INTENT_HARM
var/throw_message = "bounces off of"
var/icon_aggro = null // for swapping to when we get aggressive
var/fromtendril = FALSE
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
mob_size = MOB_SIZE_LARGE
/mob/living/simple_animal/hostile/asteroid/Initialize(mapload)
. = ..()
apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
/mob/living/simple_animal/hostile/asteroid/Aggro()
..()
if(vision_range != aggro_vision_range)
@@ -44,14 +51,21 @@
if(!stat)
Aggro()
if(T.throwforce <= 20)
visible_message("<span class='notice'>The [T.name] [src.throw_message] [src.name]!</span>")
visible_message("<span class='notice'>The [T.name] [throw_message] [src.name]!</span>")
return
..()
/mob/living/simple_animal/hostile/asteroid/death(gibbed)
SSblackbox.add_details("mobs_killed_mining","[src.type]")
var/datum/status_effect/crusher_damage/C = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
if(C && crusher_loot && prob((C.total_damage/maxHealth)) * 5) //on average, you'll need to kill 20 creatures before getting the item
spawn_crusher_loot()
..(gibbed)
/mob/living/simple_animal/hostile/asteroid/proc/spawn_crusher_loot()
butcher_results[crusher_loot] = 1
/mob/living/simple_animal/hostile/asteroid/handle_temperature_damage()
if(bodytemperature < minbodytemp)
adjustBruteLoss(2)
@@ -17,7 +17,7 @@
maxHealth = 250
max_mobs = 3
spawn_time = 300 //30 seconds default
mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher
mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
spawn_text = "emerges from"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
@@ -28,10 +28,10 @@
var/obj/effect/light_emitter/tendril/emitted_light
/mob/living/simple_animal/hostile/spawner/lavaland/goliath
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
/mob/living/simple_animal/hostile/spawner/lavaland/legion
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril
/mob/living/simple_animal/hostile/spawner/lavaland/Initialize()
. = ..()
+20 -13
View File
@@ -178,11 +178,18 @@
if(mob.throwing)
mob.throwing.finalize(FALSE)
for(var/obj/O in mob)
O.on_mob_move(direct, src)
return .
/mob/Moved(oldLoc, dir)
. = ..()
for(var/obj/O in contents)
O.on_mob_move(dir, src, oldLoc)
/mob/setDir(newDir)
. = ..()
for(var/obj/O in contents)
O.on_mob_turn(newDir, src)
///Process_Grab()
///Called by client/Move()
@@ -209,10 +216,10 @@
return
var/mob/living/L = mob
switch(L.incorporeal_move)
if(INCORPOREAL_MOVE_BASIC)
if(INCORPOREAL_MOVE_BASIC)
L.loc = get_step(L, direct)
L.setDir(direct)
if(INCORPOREAL_MOVE_SHADOW)
if(INCORPOREAL_MOVE_SHADOW)
if(prob(50))
var/locx
var/locy
@@ -242,15 +249,15 @@
L.loc = locate(locx,locy,mobloc.z)
var/limit = 2//For only two trailing shadows.
for(var/turf/T in getline(mobloc, L.loc))
new /obj/effect/temp_visual/dir_setting/ninja/shadow(T, L.dir)
new /obj/effect/temp_visual/dir_setting/ninja/shadow(T, L.dir)
limit--
if(limit<=0)
break
else
new /obj/effect/temp_visual/dir_setting/ninja/shadow(mobloc, L.dir)
new /obj/effect/temp_visual/dir_setting/ninja/shadow(mobloc, L.dir)
L.loc = get_step(L, direct)
L.setDir(direct)
if(INCORPOREAL_MOVE_JAUNT) //Incorporeal move, but blocked by holy-watered tiles and salt piles.
if(INCORPOREAL_MOVE_JAUNT) //Incorporeal move, but blocked by holy-watered tiles and salt piles.
var/turf/open/floor/stepTurf = get_step(L, direct)
for(var/obj/effect/decal/cleanable/salt/S in stepTurf)
to_chat(L, "<span class='warning'>[S] bars your passage!</span>")
@@ -295,12 +302,12 @@
return A
else
var/atom/movable/AM = A
if(AM == buckled)
if(AM == buckled)
continue
if(ismob(AM))
var/mob/M = AM
if(M.buckled)
continue
if(ismob(AM))
var/mob/M = AM
if(M.buckled)
continue
if(!AM.CanPass(src) || AM.density)
if(AM.anchored)
return AM