Our goal is to keep breaking changes between any given version of X4 to an absolute minimum. In some cases, however, we have had to change things which break scripts/mods written for older versions.
The following table provides an overview about all breaking changes. This should help you to make any necessary changes to restore compatibility of older mods with new versions of X4.
Please note that issues introduced during the beta phase might not be explicitly mentioned as a breaking change, if things would only be broken in-between two beta versions. While we still aim to document any (potential) breaking change here, there might be circumstances for which we divert from that procedure (especially in case of minor issues which is considered merely a bugfix than an intended behavior change).
Feel free to drop a note if a certain breaking change is breaking your mod and you have difficulties finding a way to work around the issue.
|UI extensions||2.0 Beta 1||FFI: GetUpgradeSlotCurrentComponent()/GetUpgradeSlotGroup() works on non-operationals|
|Before 2.0 Beta 1 using GetUpgradeSlotCurrentComponent() or GetUpgradeSlotGroup() only performed on operational objects (i.e. not wrecked objects or objects under construction). Since this is inconsistent with the rest of the UI functions, this was considered a bug and fixed in 2.0 Beta 1. If you require the old behavior, use the FFI function: IsComponentOperational() to check the passed object's state before making the call.|
|UI extensions||2.0 Beta 1||FFI: SetFormationShape() no longer indicates an error upon certain error cases|
Before 2.0 Beta 1 a call to SetFormationShape() indicated an error state to the caller in certain cases where setting a formation shape (potentially) failed. Due to a design flaw in the handling of formations, this however doesn't do any good, since the function by itself doesn't really set the formation shape in all cases. On top of that the call can fail at random. Hence, at the moment an indication of an error case that setting a formation potentially fails is no good to the caller and he has no means to distinguish that case from a real error case.