/obj layer = OBJ_LAYER plane = OBJ_PLANE vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace. //Used to store information about the contents of the object. var/list/matter var/w_class // Size of the object. var/unacidable = FALSE //universal "unacidabliness" var, here so you can use it in any obj. animate_movement = 2 var/throwforce = 1 var/catchable = 1 // can it be caught on throws/flying? var/sharp = FALSE // whether this object cuts var/edge = FALSE // whether this object is more likely to dismember var/pry = 0 //Used in attackby() to open doors var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! var/damtype = "brute" var/armor_penetration = 0 var/show_messages var/preserve_item = 0 //whether this object is preserved when its owner goes into cryo-storage, gateway, etc var/can_speak = 0 //For MMIs and admin trickery. If an object has a brainmob in its contents, set this to 1 to allow it to speak. var/show_examine = TRUE // Does this pop up on a mob when the mob is examined? var/redgate_allowed = TRUE //can we be taken through the redgate, in either direction? var/being_used = 0 /obj/Destroy() STOP_PROCESSING(SSobj, src) //VOREStation Add Start - I really am an idiot why did I make it this way if(micro_target) for(var/thing in src.contents) if(!ismob(thing)) continue var/mob/m = thing if(isbelly(src.loc)) m.forceMove(src.loc) else m.forceMove(get_turf(src.loc)) m.visible_message(span_notice("\The [m] tumbles out of \the [src]!")) //VOREStation Add End if(istype(src, /obj/item)) var/obj/item/I = src if(I.possessed_voice && I.possessed_voice.len) for(var/mob/living/voice/V in I.possessed_voice) if(!V.tf_mob_holder) V.ghostize(0) V.stat = DEAD qdel(V) return ..() /obj/Topic(href, href_list, var/datum/tgui_state/state = GLOB.tgui_default_state) if(usr && ..()) return 1 // In the far future no checks are made in an overriding Topic() beyond if(..()) return // Instead any such checks are made in CanUseTopic() if(CanUseTopic(usr, state, href_list) == STATUS_INTERACTIVE) CouldUseTopic(usr) return 0 CouldNotUseTopic(usr) return 1 /obj/CanUseTopic(var/mob/user, var/datum/tgui_state/state = GLOB.tgui_default_state) if(user.CanUseObjTopic(src)) return ..() to_chat(user, span_danger("[icon2html(src, user.client)]Access Denied!")) return STATUS_CLOSE /mob/living/silicon/CanUseObjTopic(var/obj/O) var/id = src.GetIdCard() return O.check_access(id) /mob/proc/CanUseObjTopic() return 1 /obj/proc/CouldUseTopic(var/mob/user) var/atom/host = tgui_host() host.add_hiddenprint(user) /obj/proc/CouldNotUseTopic(var/mob/user) // Nada /obj/item/proc/is_used_on(obj/O, mob/user) /obj/assume_air(datum/gas_mixture/giver) if(loc) return loc.assume_air(giver) else return null /obj/remove_air(amount) if(loc) return loc.remove_air(amount) else return null /obj/return_air() if(loc) return loc.return_air() else return null /obj/proc/updateUsrDialog(mob/user) if(in_use) var/is_in_use = 0 var/list/nearby = viewers(1, src) for(var/mob/M in nearby) if ((M.client && M.machine == src)) is_in_use = 1 src.attack_hand(M) if (isAI(user) || isrobot(user)) if (!(user in nearby)) if (user.client && user.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. is_in_use = 1 src.attack_ai(user) // check for TK users if (ishuman(user)) var/mob/living/carbon/human/H = user if(H.get_type_in_hands(/obj/item/tk_grab)) if(!(H in nearby)) if(H.client && H.machine==src) is_in_use = 1 src.attack_hand(H) in_use = is_in_use /obj/proc/updateDialog() // Check that people are actually using the machine. If not, don't update anymore. if(in_use) var/list/nearby = viewers(1, src) var/is_in_use = 0 for(var/mob/M in nearby) if ((M.client && M.machine == src)) is_in_use = 1 src.interact(M) var/ai_in_use = AutoUpdateAI(src) if(!ai_in_use && !is_in_use) in_use = 0 /obj/attack_ghost(mob/user) tgui_interact(user) ..() /mob/proc/unset_machine() machine?.remove_visual(src) src.machine = null /mob/proc/set_machine(var/obj/O) if(src.machine) unset_machine() src.machine = O if(istype(O)) O.in_use = 1 /obj/item/proc/updateSelfDialog() var/mob/M = src.loc if(istype(M) && M.client && M.machine == src) src.attack_self(M) /obj/proc/hide(h) return /obj/proc/hides_under_flooring() return 0 /obj/proc/hear_talk(mob/M, list/message_pieces, verb) if(talking_atom) talking_atom.catchMessage(multilingual_to_message(message_pieces), M) /* var/mob/mo = locate(/mob) in src if(mo) var/rendered = span_game(span_say(span_name("[M.name]:") + " " + span_message("[text]")))) mo.show_message(rendered, 2) */ return /obj/proc/hear_signlang(mob/M as mob, text, verb, datum/language/speaking) // Saycode gets worse every day. return FALSE /obj/proc/see_emote(mob/M as mob, text, var/emote_type) return /* CHOMP Removal /obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) return */ // Used to mark a turf as containing objects that are dangerous to step onto. /obj/proc/register_dangerous_to_step() var/turf/T = get_turf(src) if(T) T.register_dangerous_object(src) /obj/proc/unregister_dangerous_to_step() var/turf/T = get_turf(src) if(T) T.unregister_dangerous_object(src) // Test for if stepping on a tile containing this obj is safe to do, used for things like landmines and cliffs. /obj/proc/is_safe_to_step(mob/living/L) return TRUE /obj/proc/container_resist(var/mob/living) return //To be called from things that spill objects on the floor. //Makes an object move around randomly for a couple of tiles /obj/proc/tumble(var/dist = 2) set waitfor = FALSE if (dist >= 1) dist += rand(0,1) for(var/i = 1, i <= dist, i++) if(src) step(src, pick(NORTH,SOUTH,EAST,WEST)) sleep(rand(2,4)) // Gives the object a shake animation. /obj/proc/animate_shake() var/init_px = pixel_x var/shake_dir = pick(-1, 1) animate(src, transform=turn(matrix(), 8*shake_dir), pixel_x=init_px + 2*shake_dir, time=1) animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)