ID:2954784
 
Not Feasible
Applies to:DM Language
Status: Not Feasible

Implementing this feature is not possible now or in the foreseeable future
I'm not opening this as a bug because the current behavior remains intended, but-

Following 513.1490, isobj has been in a weird place semantically and in the shared code I'm familiar with, #define isobj(A) istype(A, /obj) is a correction included by rote. Perhaps it shouldn't have to be.

For anyone unfamiliar and skimming:
/atom/movable/foo/name = "foo"

/mob/verb/Test()
usr << "O [isobj(new /obj)]"
usr << "M [isobj(new /mob)]"
usr << "AM [isobj(new /atom/movable)]"
usr << "AMF [isobj(new /atom/movable/foo)]"

O 1
M 0
AM 1
AMF 1

I understand the internal reason given prior bug reports (eg1 eg2) but going by the documentation ("1 if all args are valid objs; 0 otherwise") it's reasonable to assume isobj(x) == istype(x, /obj) where instead the result is like isobj(x) == ismovable(x) && !ismob(x) - quite a pitfall given years have passed and user defined AM children are used.

I feel "obj means /obj" probably holds all the mindshare. Making isobj(x) an alias for (and subbing in as many as required) istype(x, /obj) even with no other wins would be an improvement.
Lummox JR resolved issue (Not Feasible)
Essentially this would only be relevant for the cursed use case of defining objects under /atom/movable but not under /obj. There's no upside to supporting that. isobj() is a test for the low-level type, not for the type path.

Anyone using objects descended from /atom/movable but not from /obj should already know to use istype() if they want to check against /obj, and there's a point to having a quick test for whether an object has the obj primitive type.