vmHeader_t *th_VM_LoadQVM(vm_t *vm, qboolean alloc) { vmHeader_t *result = orig_VM_LoadQVM(vm, alloc); if (!strcmp(vm->name, CGAME_STR)) cgvmHeader = *result; return result; } vm_t *th_VM_Create(const char *module, intptr_t (*systemCalls)(intptr_t *), vmInterpret_t interpret) { vm_t *vm = orig_VM_Create(module, systemCalls, interpret); if (!strcmp(module, CGAME_STR)) { cgame_vm = vm; void *baseAddr = cgame_vm->dataBase + cgvmHeader.dataLength + cgvmHeader.litLength; orig_cg = baseAddr + CGVM_OFFSET_CG; orig_cgs = baseAddr + CGVM_OFFSET_CGS; orig_cg_entities = baseAddr + CGVM_OFFSET_CG_ENTITIES; } return vm; }