--- title: IsUpgradeMacroCompatible summary: X4 interface reference. Types are established only within the stated scope. section: reference kind: api status: reference updated: 2026-10-26 tags: ["API","X4"] sources: ["https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/","https://www.lua.org/manual/5.1/manual.html","https://luajit.org/ext_ffi_api.html"] --- ## Return value | Type | Meaning | | --- | --- | | bool | Types describe the declared interface, not proof of a successful game effect. | [Types and methods](wiki:types) ## Declaration and parameters ```c bool IsUpgradeMacroCompatible(UniverseID defensibleid, UniverseID moduleid, const char* macroname, bool ismodule, const char* upgradetypename, size_t slot, const char* upgrademacroname); ``` | C parameter | | --- | | `UniverseID defensibleid` | | `UniverseID moduleid` | | `const char* macroname` | | `bool ismodule` | | `const char* upgradetypename` | | `size_t slot` | | `const char* upgrademacroname` | ```c bool IsUpgradeMacroCompatible(UniverseID objectid, UniverseID moduleid, const char* macroname, bool ismodule, const char* upgradetypename, size_t slot, const char* upgrademacroname); ``` | C parameter | | --- | | `UniverseID objectid` | | `UniverseID moduleid` | | `const char* macroname` | | `bool ismodule` | | `const char* upgradetypename` | | `size_t slot` | | `const char* upgrademacroname` | A pointer return is cdata, not a Lua string. A C bool maps to Lua boolean, scalar C numbers normally map to number, and 64-bit integers and structs can remain cdata. void has no direct return; output buffers may still be modified. Buffer size, lifetime, ownership and the correct UI context must be established before calling. ## Example and context See [language basics](wiki:x4-code-basics), [types and methods](wiki:types) and [Lua / MD events](wiki:md-lua-bridge). Examples there are independent learning examples. No project source files or private implementation fragments are distributed with this reference.