From 8cbe64273eb0434eb05301792677c6a7bfc40e45 Mon Sep 17 00:00:00 2001 From: TaranDahl Date: Wed, 4 Sep 2024 14:28:45 +0800 Subject: [PATCH 01/11] impl --- src/Ext/Techno/Hooks.Misc.cpp | 14 ++++++++++++++ src/Ext/TechnoType/Body.cpp | 3 +++ src/Ext/TechnoType/Body.h | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/src/Ext/Techno/Hooks.Misc.cpp b/src/Ext/Techno/Hooks.Misc.cpp index 9449af3346..80cb3fb939 100644 --- a/src/Ext/Techno/Hooks.Misc.cpp +++ b/src/Ext/Techno/Hooks.Misc.cpp @@ -98,3 +98,17 @@ DEFINE_HOOK(0x6B7600, SpawnManagerClass_AI_InitDestination, 0x6) return R->Origin() == 0x6B7600 ? SkipGameCode1 : SkipGameCode2; } + +DEFINE_HOOK(0x70FB73, FootClass_IsBunkerableNow_Dehardcode, 0x6) +{ + enum { SkipVanillaChecks = 0x70FBAF, DoVanillaChecks = 0 }; + + GET(TechnoTypeClass*, pType, EAX); + + auto const pTypeExt = TechnoTypeExt::ExtMap.Find(pType); + + if (pTypeExt && pTypeExt->BunkerableAnyWay) + return SkipVanillaChecks; + + return DoVanillaChecks; +} diff --git a/src/Ext/TechnoType/Body.cpp b/src/Ext/TechnoType/Body.cpp index aef8425b07..ec74fee789 100644 --- a/src/Ext/TechnoType/Body.cpp +++ b/src/Ext/TechnoType/Body.cpp @@ -318,6 +318,7 @@ void TechnoTypeExt::ExtData::LoadFromINIFile(CCINIClass* const pINI) this->Wake.Read(exINI, pSection, "Wake"); this->Wake_Grapple.Read(exINI, pSection, "Wake.Grapple"); this->Wake_Sinking.Read(exINI, pSection, "Wake.Sinking"); + this->BunkerableAnyWay.Read(exINI, pSection, "BunkerableAnyWay"); // Ares 0.2 this->RadarJamRadius.Read(exINI, pSection, "RadarJamRadius"); @@ -688,6 +689,8 @@ void TechnoTypeExt::ExtData::Serialize(T& Stm) .Process(this->Wake) .Process(this->Wake_Grapple) .Process(this->Wake_Sinking) + + .Process(this->BunkerableAnyWay) ; } void TechnoTypeExt::ExtData::LoadFromStream(PhobosStreamReader& Stm) diff --git a/src/Ext/TechnoType/Body.h b/src/Ext/TechnoType/Body.h index b390188549..3d79914a06 100644 --- a/src/Ext/TechnoType/Body.h +++ b/src/Ext/TechnoType/Body.h @@ -233,6 +233,8 @@ class TechnoTypeExt Nullable Wake_Grapple; Nullable Wake_Sinking; + Valueable BunkerableAnyWay; + struct LaserTrailDataEntry { ValueableIdx idxType; @@ -461,6 +463,8 @@ class TechnoTypeExt , Wake { } , Wake_Grapple { } , Wake_Sinking { } + + , BunkerableAnyWay { false } { } virtual ~ExtData() = default; From 090356405e7afb6c91fef4cadf12ab6ea8707ab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Mon, 27 Jan 2025 19:29:18 +0800 Subject: [PATCH 02/11] finish --- docs/New-or-Enhanced-Logics.md | 16 ++++++++++++++++ src/Ext/Techno/Hooks.Misc.cpp | 3 ++- src/Ext/TechnoType/Body.cpp | 4 ++-- src/Ext/TechnoType/Body.h | 4 ++-- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/docs/New-or-Enhanced-Logics.md b/docs/New-or-Enhanced-Logics.md index 387522453c..5ae1923336 100644 --- a/docs/New-or-Enhanced-Logics.md +++ b/docs/New-or-Enhanced-Logics.md @@ -524,6 +524,22 @@ Adjacent.Disallowed= ; list of BuildingTypes NoBuildAreaOnBuildup=false ; boolean ``` +### Bunker entering check dehardcode + +- In vanilla, vehicles entering tank bunkers are subject to a series of hardcoding restrictions, including having to have turrets, having to have weapons, and not having Hover speed types. Now you can skip these restrictions. + +In `rulesmd.ini`: +```ini +[SOMEVEHICLE] ; VehicleType +BunkerableAnyway=false ; boolean +``` + +```{note} +1.It needs to be used with `Bunkerable=yes`. +2.This flag only skips the static check, that is, the check on the unit type. The dynamic check (cannot be parasitized) remains unchanged. +3.Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. +``` + ### Extended building upgrades ![image](_static/images/powersup.owner-01.png) diff --git a/src/Ext/Techno/Hooks.Misc.cpp b/src/Ext/Techno/Hooks.Misc.cpp index b399452e12..e0f8422aff 100644 --- a/src/Ext/Techno/Hooks.Misc.cpp +++ b/src/Ext/Techno/Hooks.Misc.cpp @@ -434,10 +434,11 @@ DEFINE_HOOK(0x70FB73, FootClass_IsBunkerableNow_Dehardcode, 0x6) enum { SkipVanillaChecks = 0x70FBAF, DoVanillaChecks = 0 }; GET(TechnoTypeClass*, pType, EAX); + GET(FootClass*, pThis, ESI); auto const pTypeExt = TechnoTypeExt::ExtMap.Find(pType); - if (pTypeExt && pTypeExt->BunkerableAnyWay) + if (pTypeExt && pTypeExt->BunkerableAnyway && !pThis->ParasiteEatingMe) return SkipVanillaChecks; return DoVanillaChecks; diff --git a/src/Ext/TechnoType/Body.cpp b/src/Ext/TechnoType/Body.cpp index 5aac7f8bd9..97cf2cffdd 100644 --- a/src/Ext/TechnoType/Body.cpp +++ b/src/Ext/TechnoType/Body.cpp @@ -457,7 +457,7 @@ void TechnoTypeExt::ExtData::LoadFromINIFile(CCINIClass* const pINI) this->Wake.Read(exINI, pSection, "Wake"); this->Wake_Grapple.Read(exINI, pSection, "Wake.Grapple"); this->Wake_Sinking.Read(exINI, pSection, "Wake.Sinking"); - this->BunkerableAnyWay.Read(exINI, pSection, "BunkerableAnyWay"); + this->BunkerableAnyway.Read(exINI, pSection, "BunkerableAnyway"); this->KeepTargetOnMove.Read(exINI, pSection, "KeepTargetOnMove"); this->KeepTargetOnMove_ExtraDistance.Read(exINI, pSection, "KeepTargetOnMove.ExtraDistance"); @@ -833,7 +833,7 @@ void TechnoTypeExt::ExtData::Serialize(T& Stm) .Process(this->Wake_Grapple) .Process(this->Wake_Sinking) - .Process(this->BunkerableAnyWay) + .Process(this->BunkerableAnyway) .Process(this->KeepTargetOnMove) .Process(this->KeepTargetOnMove_ExtraDistance) ; diff --git a/src/Ext/TechnoType/Body.h b/src/Ext/TechnoType/Body.h index 2da2f0b1af..22d9ae165c 100644 --- a/src/Ext/TechnoType/Body.h +++ b/src/Ext/TechnoType/Body.h @@ -230,7 +230,7 @@ class TechnoTypeExt Nullable Wake_Grapple; Nullable Wake_Sinking; - Valueable BunkerableAnyWay; + Valueable BunkerableAnyway; Valueable KeepTargetOnMove; Valueable KeepTargetOnMove_ExtraDistance; @@ -457,7 +457,7 @@ class TechnoTypeExt , Wake_Grapple { } , Wake_Sinking { } - , BunkerableAnyWay { false } + , BunkerableAnyway { false } , KeepTargetOnMove { false } , KeepTargetOnMove_ExtraDistance { Leptons(0) } { } From 6844b7226ef28fffe5625dceb578668b67851f6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Mon, 27 Jan 2025 23:42:36 +0800 Subject: [PATCH 03/11] docs --- CREDITS.md | 1 + docs/Whats-New.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CREDITS.md b/CREDITS.md index 63a07c1565..ecde4dc755 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -391,6 +391,7 @@ This page lists all the individual contributions to the project by their author. - Skirmish AI "sell all buildings and set all technos to hunt" behavior dehardcode - Skirmish AI "gather when MCV deploy" behavior dehardcode - Global value of `RepairBaseNodes` + - Bunkerable checks dehardcode - **tyuah8** - Drive/Jumpjet/Ship/Teleport locomotor did not power on when it is un-piggybacked bugfix - **Aephiex** - initial fix for Ares academy not working on the initial payloads of vehicles built from a war factory - **Ares developers** diff --git a/docs/Whats-New.md b/docs/Whats-New.md index 1c270e00d7..82f58928ae 100644 --- a/docs/Whats-New.md +++ b/docs/Whats-New.md @@ -317,6 +317,7 @@ New: - Fixed sidebar not updating queued unit numbers when adding or removing units when the production is on hold (by CrimRecya) - Custom exit cell for infantry factory (by Starkku) - Option for vehicles to keep target when issued move command (by Starkku) +- Bunkerable checks dehardcode (by TaranDahl) Vanilla fixes: - Aircraft will now behave as expected according to it's `MovementZone` and `SpeedType` when moving onto different surfaces. In particular, this fixes erratic behavior when vanilla aircraft is ordered to move onto water surface and instead the movement order changes to a shore nearby (by CrimRecya) From 0ec75bfccfa162ae351c94bda9adde2ecbb554cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Tue, 28 Jan 2025 09:35:16 +0800 Subject: [PATCH 04/11] Update Hooks.Misc.cpp --- src/Ext/Techno/Hooks.Misc.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Ext/Techno/Hooks.Misc.cpp b/src/Ext/Techno/Hooks.Misc.cpp index e0f8422aff..cbfb40c0c7 100644 --- a/src/Ext/Techno/Hooks.Misc.cpp +++ b/src/Ext/Techno/Hooks.Misc.cpp @@ -437,8 +437,9 @@ DEFINE_HOOK(0x70FB73, FootClass_IsBunkerableNow_Dehardcode, 0x6) GET(FootClass*, pThis, ESI); auto const pTypeExt = TechnoTypeExt::ExtMap.Find(pType); + auto const loco = pType->Locomotor; - if (pTypeExt && pTypeExt->BunkerableAnyway && !pThis->ParasiteEatingMe) + if (pTypeExt && pTypeExt->BunkerableAnyway && !pThis->ParasiteEatingMe && loco != LocomotionClass::CLSIDs::Hover && loco != LocomotionClass::CLSIDs::Mech) return SkipVanillaChecks; return DoVanillaChecks; From 63a1f1c9c191651ef7082ccc3301d80dfae61608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Tue, 28 Jan 2025 09:40:14 +0800 Subject: [PATCH 05/11] Update Hooks.Misc.cpp --- src/Ext/Techno/Hooks.Misc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ext/Techno/Hooks.Misc.cpp b/src/Ext/Techno/Hooks.Misc.cpp index cbfb40c0c7..c9ab2d1704 100644 --- a/src/Ext/Techno/Hooks.Misc.cpp +++ b/src/Ext/Techno/Hooks.Misc.cpp @@ -439,7 +439,7 @@ DEFINE_HOOK(0x70FB73, FootClass_IsBunkerableNow_Dehardcode, 0x6) auto const pTypeExt = TechnoTypeExt::ExtMap.Find(pType); auto const loco = pType->Locomotor; - if (pTypeExt && pTypeExt->BunkerableAnyway && !pThis->ParasiteEatingMe && loco != LocomotionClass::CLSIDs::Hover && loco != LocomotionClass::CLSIDs::Mech) + if (pTypeExt && pTypeExt->BunkerableAnyway && !pThis->ParasiteEatingMe && loco != LocomotionClass::CLSIDs::Hover && loco != LocomotionClass::CLSIDs::Mech && loco != LocomotionClass::CLSIDs::Fly) return SkipVanillaChecks; return DoVanillaChecks; From 183f1593ec9710daca9131869cb737a2d74eb4ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Thu, 30 Jan 2025 12:01:52 +0800 Subject: [PATCH 06/11] Update New-or-Enhanced-Logics.md --- docs/New-or-Enhanced-Logics.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/docs/New-or-Enhanced-Logics.md b/docs/New-or-Enhanced-Logics.md index 5ae1923336..34dc62cb5f 100644 --- a/docs/New-or-Enhanced-Logics.md +++ b/docs/New-or-Enhanced-Logics.md @@ -524,22 +524,6 @@ Adjacent.Disallowed= ; list of BuildingTypes NoBuildAreaOnBuildup=false ; boolean ``` -### Bunker entering check dehardcode - -- In vanilla, vehicles entering tank bunkers are subject to a series of hardcoding restrictions, including having to have turrets, having to have weapons, and not having Hover speed types. Now you can skip these restrictions. - -In `rulesmd.ini`: -```ini -[SOMEVEHICLE] ; VehicleType -BunkerableAnyway=false ; boolean -``` - -```{note} -1.It needs to be used with `Bunkerable=yes`. -2.This flag only skips the static check, that is, the check on the unit type. The dynamic check (cannot be parasitized) remains unchanged. -3.Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. -``` - ### Extended building upgrades ![image](_static/images/powersup.owner-01.png) @@ -1458,6 +1442,24 @@ DestroyAnim= ; Animation DestroySound= ; Sound ``` +## Vehicles + +### Bunker entering check dehardcode + +- In vanilla, vehicles entering tank bunkers are subject to a series of hardcoding restrictions, including having to have turrets, having to have weapons, and not having Hover speed types. Now you can skip these restrictions. +- This needs to be used with `Bunkerable=yes`. +- This flag only skips the static check, that is, the check on the unit type. The dynamic check (cannot be parasitized) remains unchanged. + +In `rulesmd.ini`: +```ini +[SOMEVEHICLE] ; VehicleType +BunkerableAnyway=false ; boolean +``` + +```{warning} +Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. +``` + ## Warheads ```{hint} From add19e0b063f1b4bd00c216a6d58f5dd86436ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:24:58 +0800 Subject: [PATCH 07/11] Update New-or-Enhanced-Logics.md --- docs/New-or-Enhanced-Logics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/New-or-Enhanced-Logics.md b/docs/New-or-Enhanced-Logics.md index 34dc62cb5f..b8e84a52e4 100644 --- a/docs/New-or-Enhanced-Logics.md +++ b/docs/New-or-Enhanced-Logics.md @@ -1457,7 +1457,7 @@ BunkerableAnyway=false ; boolean ``` ```{warning} -Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. +Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. Fly, Hover, and Mech Locomotors are currently never allowed to enter tank bunkers, so vehicles with these Locomotors is prohibited from entering. ``` ## Warheads From 15c77bd71403bcd1248ef409bf570e0725f2c019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Thu, 30 Jan 2025 19:05:38 +0800 Subject: [PATCH 08/11] Update New-or-Enhanced-Logics.md --- docs/New-or-Enhanced-Logics.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/New-or-Enhanced-Logics.md b/docs/New-or-Enhanced-Logics.md index b8e84a52e4..3ab3365c26 100644 --- a/docs/New-or-Enhanced-Logics.md +++ b/docs/New-or-Enhanced-Logics.md @@ -1457,8 +1457,22 @@ BunkerableAnyway=false ; boolean ``` ```{warning} -Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. Fly, Hover, and Mech Locomotors are currently never allowed to enter tank bunkers, so vehicles with these Locomotors is prohibited from entering. -``` +Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. Following the simple checks performed by the provider of this feature, Bunkerability is mainly determined by Locomotor. The details are shown in the table below. +``` + +| *Locomotor* | *Bunkerability* | +| ----------: | :-----------------------------: | +|Drive | Fuctional. | +|Jumpjet | Bunkerable but weird. | +|Hover | Unbunkerable. | +|Rocket | The game crash before entering. | +|Tunnel | Bunkerable but weird. | +|Walk | Bunkerable but weird. | +|DropPod | The game crash before entering. | +|Fly | Unbunkerable. | +|Teleport | Bunkerable but weird. | +|Mech | Unbunkerable. | +|Ship | The game crash when entering. | ## Warheads From 56fb813d3027d9efab93b086fd2ba6f07399efe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Fri, 31 Jan 2025 10:48:23 +0800 Subject: [PATCH 09/11] Update Hooks.Misc.cpp --- src/Ext/Techno/Hooks.Misc.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Ext/Techno/Hooks.Misc.cpp b/src/Ext/Techno/Hooks.Misc.cpp index c9ab2d1704..97f68e781e 100644 --- a/src/Ext/Techno/Hooks.Misc.cpp +++ b/src/Ext/Techno/Hooks.Misc.cpp @@ -429,6 +429,18 @@ DEFINE_HOOK(0x51D7E0, InfantryClass_DoAction_Water, 0x5) return Continue; } +bool LocomotorCheckForBunkerable(TechnoTypeClasss* pType) +{ + auto const loco = pType->Locomotor; + + return loco != LocomotionClass::CLSIDs::Hover && + loco != LocomotionClass::CLSIDs::Mech && + loco != LocomotionClass::CLSIDs::Fly && + loco != LocomotionClass::CLSIDs::DropPod && + loco != LocomotionClass::CLSIDs::Rocket && + loco != LocomotionClass::CLSIDs::Ship; +} + DEFINE_HOOK(0x70FB73, FootClass_IsBunkerableNow_Dehardcode, 0x6) { enum { SkipVanillaChecks = 0x70FBAF, DoVanillaChecks = 0 }; @@ -439,7 +451,7 @@ DEFINE_HOOK(0x70FB73, FootClass_IsBunkerableNow_Dehardcode, 0x6) auto const pTypeExt = TechnoTypeExt::ExtMap.Find(pType); auto const loco = pType->Locomotor; - if (pTypeExt && pTypeExt->BunkerableAnyway && !pThis->ParasiteEatingMe && loco != LocomotionClass::CLSIDs::Hover && loco != LocomotionClass::CLSIDs::Mech && loco != LocomotionClass::CLSIDs::Fly) + if (pTypeExt && pTypeExt->BunkerableAnyway && !pThis->ParasiteEatingMe && LocomotorCheckForBunkerable(pType)) return SkipVanillaChecks; return DoVanillaChecks; From 87ad0c50a4ee9c334c2b7c8e8996a4a1ebf5fcd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Fri, 31 Jan 2025 11:18:30 +0800 Subject: [PATCH 10/11] Update Hooks.Misc.cpp --- src/Ext/Techno/Hooks.Misc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ext/Techno/Hooks.Misc.cpp b/src/Ext/Techno/Hooks.Misc.cpp index 97f68e781e..5a688ff4ca 100644 --- a/src/Ext/Techno/Hooks.Misc.cpp +++ b/src/Ext/Techno/Hooks.Misc.cpp @@ -429,14 +429,14 @@ DEFINE_HOOK(0x51D7E0, InfantryClass_DoAction_Water, 0x5) return Continue; } -bool LocomotorCheckForBunkerable(TechnoTypeClasss* pType) +bool __fastcall LocomotorCheckForBunkerable(TechnoTypeClass* pType) { auto const loco = pType->Locomotor; return loco != LocomotionClass::CLSIDs::Hover && loco != LocomotionClass::CLSIDs::Mech && loco != LocomotionClass::CLSIDs::Fly && - loco != LocomotionClass::CLSIDs::DropPod && + loco != LocomotionClass::CLSIDs::Droppod && loco != LocomotionClass::CLSIDs::Rocket && loco != LocomotionClass::CLSIDs::Ship; } From 86467090884c56699d726db9c1755f90bf96cf11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=AA=E5=91=B3=E9=BA=BB=E9=85=B1?= <93972760+TaranDahl@users.noreply.github.com> Date: Fri, 31 Jan 2025 17:54:18 +0800 Subject: [PATCH 11/11] Update New-or-Enhanced-Logics.md --- docs/New-or-Enhanced-Logics.md | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/docs/New-or-Enhanced-Logics.md b/docs/New-or-Enhanced-Logics.md index 3ab3365c26..9823bb5463 100644 --- a/docs/New-or-Enhanced-Logics.md +++ b/docs/New-or-Enhanced-Logics.md @@ -1457,22 +1457,8 @@ BunkerableAnyway=false ; boolean ``` ```{warning} -Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. Following the simple checks performed by the provider of this feature, Bunkerability is mainly determined by Locomotor. The details are shown in the table below. -``` - -| *Locomotor* | *Bunkerability* | -| ----------: | :-----------------------------: | -|Drive | Fuctional. | -|Jumpjet | Bunkerable but weird. | -|Hover | Unbunkerable. | -|Rocket | The game crash before entering. | -|Tunnel | Bunkerable but weird. | -|Walk | Bunkerable but weird. | -|DropPod | The game crash before entering. | -|Fly | Unbunkerable. | -|Teleport | Bunkerable but weird. | -|Mech | Unbunkerable. | -|Ship | The game crash when entering. | +Skipping checks with this feature doesn't mean that vehicles and tank bunkers will interact correctly. Following the simple checks performed by the provider of this feature, bunkerability is mainly determined by Locomotor. The details can be found on ModEnc. +``` ## Warheads