@@ -11884,6 +11884,23 @@ static RValue builtin_CopyStatic(VMContext* ctx, RValue* args, int32_t argCount)
1188411884 VM_copyStatic(ctx, &args[0]);
1188511885 return RValue_makeUndefined();
1188611886}
11887+
11888+ // @@GetInstance@@(target) - takes an object index and returns the first active instance's ID.
11889+ static RValue builtin_GetInstance(VMContext* ctx, RValue* args, int32_t argCount) {
11890+ if (1 > argCount) return RValue_makeInt32(INSTANCE_NOONE);
11891+
11892+ Runner* runner = ctx->runner;
11893+ int32_t target = RValue_toInt32(args[0]);
11894+
11895+ if (target >= 0 && (uint32_t) target < ctx->dataWin->objt.count) {
11896+ Instance** bucket = runner->instancesByObject[target];
11897+ int32_t bucketCount = (int32_t) arrlen(bucket);
11898+ for (int32_t i = 0; bucketCount > i; i++) {
11899+ if (bucket[i]->active) return RValue_makeInt32((int32_t) bucket[i]->instanceId);
11900+ }
11901+ }
11902+ return RValue_makeInt32(INSTANCE_NOONE);
11903+ }
1188711904#endif
1188811905
1188911906// ===[ PATH FUNCTIONS ]===
@@ -14084,6 +14101,7 @@ void VMBuiltins_registerAll(VMContext* ctx) {
1408414101 VM_registerBuiltin(ctx, "@@NewGMLObject@@", builtin_NewGMLObject);
1408514102 VM_registerBuiltin(ctx, "@@CopyStatic@@", builtin_CopyStatic);
1408614103 VM_registerBuiltin(ctx, "@@SetStatic@@", builtin_SetStatic);
14104+ VM_registerBuiltin(ctx, "@@GetInstance@@", builtin_GetInstance);
1408714105#endif
1408814106
1408914107 // Path
0 commit comments