Finishes seperating ZAS logic from CanPass().

This commit is contained in:
Neerti
2019-02-10 01:46:38 -05:00
parent d880379bbf
commit 76b077af4a
47 changed files with 153 additions and 260 deletions

View File

@@ -147,7 +147,7 @@
else
die(0)
/obj/effect/meteor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/effect/meteor/CanPass(atom/movable/mover, turf/target)
return istype(mover, /obj/effect/meteor) ? 1 : ..()
/obj/effect/meteor/proc/ram_turf(var/turf/T)

View File

@@ -128,13 +128,10 @@ for reference:
dismantle()
return
/obj/structure/barricade/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
if(air_group || (height==0))
return 1
/obj/structure/barricade/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
if(istype(mover) && mover.checkpass(PASSTABLE))
return 1
else
return 0
return TRUE
return FALSE
//Actual Deployable machinery stuff
/obj/machinery/deployable
@@ -223,13 +220,10 @@ for reference:
anchored = !anchored
icon_state = "barrier[locked]"
/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
if(air_group || (height==0))
return 1
/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
if(istype(mover) && mover.checkpass(PASSTABLE))
return 1
else
return 0
return TRUE
return FALSE
/obj/machinery/deployable/barrier/proc/explode()

View File

@@ -264,7 +264,7 @@
// If for some reason this is actually needed for something important, uncomment this.
/obj/machinery/door/blast/CanZASPass(turf/T, is_zone)
if(is_zone)
return TRUE
return ATMOS_PASS_YES
return ..()
*/

View File

@@ -140,12 +140,12 @@
if(istype(mover) && mover.checkpass(PASSGLASS))
return !opacity
return !density
/*
/obj/machinery/door/CanZASPass(turf/T, is_zone)
if(is_zone)
return !block_air_zones
return block_air_zones ? ATMOS_PASS_NO : ATMOS_PASS_YES
return ..()
*/
/obj/machinery/door/proc/bumpopen(mob/user as mob)
if(operating) return
if(user.last_airflow > world.time - vsc.airflow_delay) //Fakkit

View File

@@ -471,11 +471,10 @@
heat_proof = 1
air_properties_vary_with_direction = 1
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return 1
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
if(air_group) return 0
return !density
else
return 1

View File

@@ -84,14 +84,19 @@
open()
addtimer(CALLBACK(src, .proc/close), check_access(null)? 50 : 20)
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height, air_group)
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return 1
return TRUE
if(get_dir(mover, loc) == turn(dir, 180)) //Make sure looking at appropriate border
if(air_group) return 0
return !density
else
return 1
return TRUE
/obj/machinery/door/window/CanZASPass(turf/T, is_zone)
if(get_dir(T, loc) == turn(dir, 180))
if(is_zone) // No merging allowed.
return ATMOS_PASS_NO
return ..() // Air can flow if open (density == FALSE).
return ATMOS_PASS_YES // Windoors don't block if not facing the right way.
/obj/machinery/door/window/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
if(istype(mover) && mover.checkpass(PASSGLASS))

View File

@@ -180,7 +180,7 @@
to_chat(user, "<span class='notice'>[attached ? attached : "No one"] is attached.</span>")
/obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0)
if(height && istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, mice, drones, and the like through.
return 1
/obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, mice, drones, and the like through.
return TRUE
return ..()

View File

@@ -15,14 +15,14 @@
var/frequency = 1379
var/datum/radio_frequency/radio_connection
/obj/machinery/mech_sensor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(!src.enabled()) return 1
if(air_group || (height==0)) return 1
/obj/machinery/mech_sensor/CanPass(atom/movable/mover, turf/target)
if(!enabled())
return TRUE
if ((get_dir(loc, target) & dir) && src.is_blocked(mover))
if((get_dir(loc, target) & dir) && src.is_blocked(mover))
src.give_feedback(mover)
return 0
return 1
return FALSE
return TRUE
/obj/machinery/mech_sensor/proc/is_blocked(O as obj)
if(istype(O, /obj/mecha/medical/odysseus))

View File

@@ -26,6 +26,7 @@
density = 1
opacity = 1
anchored = 1
can_atmos_pass = ATMOS_PASS_NO
var/health = 200
//var/mob/living/affecting = null
@@ -128,8 +129,7 @@
..()
return
/obj/effect/alien/resin/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group) return 0
/obj/effect/alien/resin/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return !opacity
return !density

View File

@@ -130,6 +130,7 @@
anchored = 1
name = "foamed metal"
desc = "A lightweight foamed metal wall."
can_atmos_pass = ATMOS_PASS_NO
var/metal = 1 // 1 = aluminum, 2 = iron
/obj/structure/foamedmetal/New()
@@ -178,8 +179,3 @@
qdel(src)
else
user << "<span class='notice'>You hit the metal foam to no effect.</span>"
/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
if(air_group)
return 0
return !density

View File

@@ -62,17 +62,16 @@
icon_state = "stickyweb2"
return ..()
/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /mob/living/simple_mob/animal/giant_spider))
return 1
return TRUE
else if(istype(mover, /mob/living))
if(prob(50))
mover << "<span class='warning'>You get stuck in \the [src] for a moment.</span>"
return 0
to_chat(mover, span("warning", "You get stuck in \the [src] for a moment."))
return FALSE
else if(istype(mover, /obj/item/projectile))
return prob(30)
return 1
return TRUE
/obj/effect/spider/eggcluster
name = "egg cluster"

View File

@@ -8,13 +8,12 @@
density = 0
opacity = 0
/obj/effect/zone_divider/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/effect/zone_divider/CanZASPass(turf/T, is_zone)
// Special case to prevent us from being part of a zone during the first air master tick.
// We must merge ourselves into a zone on next tick. This will cause a bit of lag on
// startup, but it can't really be helped you know?
if(air_master && air_master.current_cycle == 0)
spawn(1)
air_master.mark_for_update(get_turf(src))
return 0
return !air_group // Anything except zones can pass
return ATMOS_PASS_NO
return is_zone ? ATMOS_PASS_NO : ATMOS_PASS_YES // Anything except zones can pass

View File

@@ -286,16 +286,16 @@ var/list/tape_roll_applications = list()
update_icon()
name = "crumpled [name]"
/obj/item/tape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/item/tape/CanPass(atom/movable/mover, turf/target)
if(!lifted && ismob(mover))
var/mob/M = mover
add_fingerprint(M)
if (!allowed(M)) //only select few learn art of not crumpling the tape
M << "<span class='warning'>You are not supposed to go past [src]...</span>"
if(!allowed(M)) //only select few learn art of not crumpling the tape
to_chat(M, span("warning", "You are not supposed to go past \the [src]..."))
if(M.a_intent == I_HELP && !(istype(M, /mob/living/simple_mob)))
return 0
return FALSE
crumple()
return ..(mover)
return ..()
/obj/item/tape/attackby(obj/item/weapon/W as obj, mob/user as mob)
breaktape(user)

View File

@@ -132,11 +132,8 @@ two tiles on initialization, and which way a cliff is facing may change during m
// Movement-related code.
/obj/structure/cliff/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0)
if(air_group || height == 0)
return TRUE // Airflow can always pass.
else if(isliving(mover))
/obj/structure/cliff/CanPass(atom/movable/mover, turf/target)
if(isliving(mover))
var/mob/living/L = mover
if(L.hovering) // Flying mobs can always pass.
return TRUE

View File

@@ -27,7 +27,7 @@
user << "<span class='notice'>You cannot hang [W] on [src]</span>"
return ..()
/obj/structure/coatrack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/structure/coatrack/CanPass(atom/movable/mover, turf/target)
var/can_hang = 0
for (var/T in allowed)
if(istype(mover,T))

View File

@@ -68,7 +68,7 @@
else
to_chat(user, "It is full.")
/obj/structure/closet/CanPass(atom/movable/mover, turf/target, height, air_group)
/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
if(wall_mounted)
return TRUE
return ..()

View File

@@ -39,7 +39,7 @@
"<span class='notice'>You stop climbing into \the [src.name].</span>")
return
/obj/structure/closet/grave/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/structure/closet/grave/CanPass(atom/movable/mover, turf/target)
if(opened && ismob(mover))
var/mob/M = mover
add_fingerprint(M)

View File

@@ -63,7 +63,7 @@
hole_size = LARGE_HOLE
// Projectiles can pass through fences.
/obj/structure/fence/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0)
/obj/structure/fence/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /obj/item/projectile))
return TRUE
return ..()

View File

@@ -38,15 +38,12 @@
if(epitaph)
to_chat(user, epitaph)
/obj/structure/gravemarker/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(!mover)
return 1
/obj/structure/gravemarker/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return 1
return TRUE
if(get_dir(loc, target) & dir)
return !density
else
return 1
return TRUE
/obj/structure/gravemarker/CheckExit(atom/movable/O as mob|obj, target as turf)
if(istype(O) && O.checkpass(PASSTABLE))

View File

@@ -49,15 +49,12 @@
attack_generic(user,damage_dealt,attack_message)
/obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
/obj/structure/grille/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGRILLE))
return 1
else
if(istype(mover, /obj/item/projectile))
return prob(30)
else
return !density
return TRUE
if(istype(mover, /obj/item/projectile))
return prob(30)
return !density
/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
@@ -235,14 +232,10 @@
/obj/structure/grille/cult
name = "cult grille"
desc = "A matrice built out of an unknown material, with some sort of force field blocking air around it"
desc = "A matrice built out of an unknown material, with some sort of force field blocking air around it."
icon_state = "grillecult"
health = 40 //Make it strong enough to avoid people breaking in too easily
/obj/structure/grille/cult/CanPass(atom/movable/mover, turf/target, height = 1.5, air_group = 0)
if(air_group)
return 0 //Make sure air doesn't drain
..()
health = 40 // Make it strong enough to avoid people breaking in too easily.
can_atmos_pass = ATMOS_PASS_NO // Make sure air doesn't drain.
/obj/structure/grille/broken/cult
icon_state = "grillecult-b"

View File

@@ -64,15 +64,4 @@
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
name = "airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps."
/obj/structure/plasticflaps/mining/New() //set the turf below the flaps to block air
var/turf/T = get_turf(loc)
if(T)
T.blocks_air = 1
..()
/obj/structure/plasticflaps/mining/Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor
var/turf/T = get_turf(loc)
if(T && istype(T, /turf/simulated/floor))
T.blocks_air = 0
..()
can_atmos_pass = ATMOS_PASS_NO

View File

@@ -34,15 +34,12 @@
for(var/obj/structure/railing/R in orange(location, 1))
R.update_icon()
/obj/structure/railing/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(!mover)
return 1
/obj/structure/railing/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return 1
if(get_dir(loc, target) == dir)
return TRUE
if(get_dir(mover, target) == turn(dir, 180))
return !density
else
return 1
return TRUE
/obj/structure/railing/examine(mob/user)
. = ..()

View File

@@ -2,6 +2,7 @@
name = "door"
density = 1
anchored = 1
can_atmos_pass = ATMOS_PASS_DENSITY
icon = 'icons/obj/doors/material_doors.dmi'
icon_state = "metal"
@@ -36,7 +37,7 @@
else
set_opacity(1)
if(material.products_need_process())
START_PROCESSING(SSobj, src)
START_PROCESSING(SSobj, src)
update_nearby_tiles(need_rebuild=1)
/obj/structure/simple_door/Destroy()
@@ -63,8 +64,7 @@
/obj/structure/simple_door/attack_hand(mob/user as mob)
return TryToSwitchState(user)
/obj/structure/simple_door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group) return 0
/obj/structure/simple_door/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /obj/effect/beam))
return !opacity
return !density

View File

@@ -68,11 +68,10 @@
name = "[material.display_name] [initial(name)]"
desc += " It's made of [material.use_name]."
/obj/structure/bed/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/structure/bed/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return 1
else
return ..()
return TRUE
return ..()
/obj/structure/bed/ex_act(severity)
switch(severity)

View File

@@ -54,14 +54,12 @@ obj/structure/windoor_assembly/Destroy()
/obj/structure/windoor_assembly/update_icon()
icon_state = "[facing]_[secure]windoor_assembly[state]"
/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return 1
return TRUE
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
if(air_group) return 0
return !density
else
return 1
return TRUE
/obj/structure/windoor_assembly/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
if(istype(mover) && mover.checkpass(PASSGLASS))

View File

@@ -3,6 +3,7 @@
desc = "A window."
icon = 'icons/obj/structures.dmi'
density = 1
can_atmos_pass = ATMOS_PASS_DENSITY
w_class = ITEMSIZE_NORMAL
layer = WINDOW_LAYER
@@ -129,7 +130,7 @@
/obj/structure/window/blob_act()
take_damage(50)
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/structure/window/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return TRUE
if(is_fulltile())
@@ -139,6 +140,11 @@
else
return TRUE
/obj/structure/window/CanZASPass(turf/T, is_zone)
if(is_fulltile() || get_dir(T, loc) == turn(dir, 180)) // Make sure we're handling the border correctly.
return anchored ? ATMOS_PASS_NO : ATMOS_PASS_YES // If it's anchored, it'll block air.
return ATMOS_PASS_YES // Don't stop airflow from the other sides.
/obj/structure/window/CheckExit(atom/movable/O as mob|obj, target as turf)
if(istype(O) && O.checkpass(PASSGLASS))
return 1

View File

@@ -10,6 +10,7 @@
density = 1
anchored = 1.0
pressure_resistance = 4*ONE_ATMOSPHERE
can_atmos_pass = ATMOS_PASS_NO
var/win_path = /obj/structure/window/basic
var/activated
@@ -22,7 +23,7 @@
/obj/effect/wingrille_spawn/attack_generic()
activate()
/obj/effect/wingrille_spawn/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
/obj/effect/wingrille_spawn/CanPass(atom/movable/mover, turf/target)
return FALSE
/obj/effect/wingrille_spawn/Initialize()

View File

@@ -9,13 +9,15 @@
density = 1
opacity = 0
anchored = 1
can_atmos_pass = ATMOS_PASS_NO
var/window_flags = 0 // Bitflags to indicate connected windows
var/wall_flags = 0 // Bitflags to indicate connected walls
/obj/structure/shuttle/window/CanPass(atom/movable/mover, turf/target, height, air_group)
if(!height || air_group) return 0
else return ..()
/obj/structure/shuttle/window/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return TRUE
return ..()
/obj/structure/shuttle/window/Initialize()
. = ..()