/atom layer = 2 var/level = 2 var/flags = FPRINT var/list/fingerprints var/list/fingerprintshidden var/fingerprintslast = null var/list/blood_DNA var/last_bumped = 0 var/pass_flags = 0 ///Chemistry. var/datum/reagents/reagents = null //var/chem_is_open_container = 0 // replaced by OPENCONTAINER flags and atom/proc/is_open_container() ///Chemistry. //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom proc/assume_air(datum/gas_mixture/giver) del(giver) return null proc/remove_air(amount) return null proc/return_air() if(loc) return loc.return_air() else return null // Convenience proc to see if a container is open for chemistry handling // returns true if open // false if closed proc/is_open_container() return flags & OPENCONTAINER /*//Convenience proc to see whether a container can be accessed in a certain way. proc/can_subract_container() return flags & EXTRACT_CONTAINER proc/can_add_container() return flags & INSERT_CONTAINER */ obj assume_air(datum/gas_mixture/giver) if(loc) return loc.assume_air(giver) else return null remove_air(amount) if(loc) return loc.remove_air(amount) else return null return_air() if(loc) return loc.return_air() else return null /atom/proc/meteorhit(obj/effect/meteor as obj) return /atom/proc/allow_drop() return 1 /atom/proc/CheckExit() return 1 /atom/proc/HasEntered(atom/movable/AM as mob|obj) return /atom/proc/HasProximity(atom/movable/AM as mob|obj) return /atom/proc/emp_act(var/severity) return /atom/proc/bullet_act(var/obj/item/projectile/Proj) return 0 /atom/proc/in_contents_of(container)//can take class or object instance as argument if(ispath(container)) if(istype(src.loc, container)) return 1 else if(src in container) return 1 return /* * atom/proc/search_contents_for(path,list/filter_path=null) * Recursevly searches all atom contens (including contents contents and so on). * * ARGS: path - search atom contents for atoms of this type * list/filter_path - if set, contents of atoms not of types in this list are excluded from search. * * RETURNS: list of found atoms */ /atom/proc/search_contents_for(path,list/filter_path=null) var/list/found = list() for(var/atom/A in src) if(istype(A, path)) found += A if(filter_path) var/pass = 0 for(var/type in filter_path) pass |= istype(A, type) if(!pass) continue if(A.contents.len) found += A.search_contents_for(path,filter_path) return found /atom/movable/overlay/attackby(a, b) if (src.master) return src.master.attackby(a, b) return /atom/movable/overlay/attack_paw(a, b, c) if (src.master) return src.master.attack_paw(a, b, c) return /atom/movable/overlay/attack_hand(a, b, c) if (src.master) return src.master.attack_hand(a, b, c) return /atom/movable/overlay/New() for(var/x in src.verbs) src.verbs -= x return /atom/movable layer = 3 var/last_move = null var/anchored = 0 // var/elevation = 2 - not used anywhere var/move_speed = 10 var/l_move_time = 1 var/m_flag = 1 var/throwing = 0 var/throw_speed = 2 var/throw_range = 7 var/moved_recently = 0 /atom/movable/overlay var/atom/master = null anchored = 1 /atom/movable/Move() var/atom/A = src.loc . = ..() src.move_speed = world.timeofday - src.l_move_time src.l_move_time = world.timeofday src.m_flag = 1 if ((A != src.loc && A && A.z == src.z)) src.last_move = get_dir(A, src.loc) return /* Beam code by Gunbuddy Beam() proc will only allow one beam to come from a source at a time. Attempting to call it more than once at a time per source will cause graphical errors. Also, the icon used for the beam will have to be vertical and 32x32. The math involved assumes that the icon is vertical to begin with so unless you want to adjust the math, its easier to just keep the beam vertical. */ /atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10) //BeamTarget represents the target for the beam, basically just means the other end. //Time is the duration to draw the beam //Icon is obviously which icon to use for the beam, default is beam.dmi //Icon_state is what icon state is used. Default is b_beam which is a blue beam. //Maxdistance is the longest range the beam will persist before it gives up. var/EndTime=world.time+time while(BeamTarget&&world.timelength) var/icon/II=new(icon,icon_state) II.DrawBox(null,1,(length-N),32,32) II.Turn(Angle) X.icon=II else X.icon=I var/Pixel_x=round(sin(Angle)+32*sin(Angle)*(N+16)/32) var/Pixel_y=round(cos(Angle)+32*cos(Angle)*(N+16)/32) if(DX==0) Pixel_x=0 if(DY==0) Pixel_y=0 if(Pixel_x>32) for(var/a=0, a<=Pixel_x,a+=32) X.x++ Pixel_x-=32 if(Pixel_x<-32) for(var/a=0, a>=Pixel_x,a-=32) X.x-- Pixel_x+=32 if(Pixel_y>32) for(var/a=0, a<=Pixel_y,a+=32) X.y++ Pixel_y-=32 if(Pixel_y<-32) for(var/a=0, a>=Pixel_y,a-=32) X.y-- Pixel_y+=32 X.pixel_x=Pixel_x X.pixel_y=Pixel_y sleep(3) //Changing this to a lower value will cause the beam to follow more smoothly with movement, but it will also be more laggy. //I've found that 3 ticks provided a nice balance for my use. for(var/obj/effect/overlay/beam/O in orange(10,src)) if(O.BeamSource==src) del O atom/movable/proc/forceMove(atom/destination) if(destination) if(loc) loc.Exited(src) loc = destination loc.Entered(src) return 1 return 0