Hmm... I'm somewhat saddened, but ZC + memory handling aren't exactly a happy coupling. I would have expected that a pointer that is in use, couldn't be reissued, and would be passed over for the next legal value.
How is detection of array pointers, for global arrays handled? I'd think that would carry over to handling other objects, but IDK. I suspect they're handled differently on the stack, then; or is it that array pointers are assigned at declaration, and ffc/weapon/etc pointers at initialisation? No, they can't be at init, they must be at decl, but if they're just raw ints....sigh.
Is it possible to manually typecast from an object type to int, to read its pointer, and then back again? Being able to do that would at least help, as it'd make it possible to make global functions to use a typed object declared in a script, from anywhere else.