diff --git a/CREDITS.md b/CREDITS.md index 0349de648d..5a40410a88 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -729,6 +729,7 @@ This page lists all the individual contributions to the project by their author. - Fix the bug where landing direction cannot be correctly converted when set to a value exceeding 256 - Separately define the global default values of TerrainTypes' `IsPassable` and `CanBeBuiltOn` based on `SpawnsTiberium` - Remove the restriction that prohibits InfantryTypes from using the InitialPayload logic + - Disable AlphaImage during Buildup - **Ollerus**: - Build limit group enhancement - Customizable rocker amplitude diff --git a/docs/Fixed-or-Improved-Logics.md b/docs/Fixed-or-Improved-Logics.md index 772f01b23f..46bd6df1f1 100644 --- a/docs/Fixed-or-Improved-Logics.md +++ b/docs/Fixed-or-Improved-Logics.md @@ -1323,6 +1323,19 @@ StartFacing.Random= ; boolean, defaults to [General] -> BuildingSt Unlike the identically named INI flag in Tiberian Sun, this flag uses a 256-point circle rather than an 8-point circle. ``` +### Disable AlphaImage during Buildup + +- Now you can disable AlphaImage before the building is completed. + +In `rulesmd.ini`: +```ini +[AudioVisual] +NoAlphaImageOnBuildup=false ; boolean + +[SOMEBUILDING] ; BuildingType +NoAlphaImageOnBuildup= ; boolean, defaults to [AudioVisual] -> NoAlphaImageOnBuildup +``` + ### Disable `DamageSound` - Now you can disable `DamageSound` of a building. diff --git a/docs/Whats-New.md b/docs/Whats-New.md index 1cc30ec3ee..705b1ceba9 100644 --- a/docs/Whats-New.md +++ b/docs/Whats-New.md @@ -651,6 +651,7 @@ HideShakeEffects=false ; boolean - Keep Syringe open until the game exits (by 11EJDE11, ported from Vinifera, original by ZivDero & secsome) - [Drop crates on death](New-or-Enhanced-Logics.md#drop-crates-on-death) (by FS-21) - [`600` Configure Drop Crate](AI-Scripting-and-Mapping.md#configure-drop-crate) (by FS-21) +- [Disable AlphaImage during Buildup](Fixed-or-Improved-Logics.md#disable-alphaimage-during-buildup) (by Noble_Fish) #### Vanilla fixes: - Fixed sidebar not updating queued unit numbers when adding or removing units when the production is on hold (by CrimRecya) diff --git a/src/Ext/BuildingType/Body.cpp b/src/Ext/BuildingType/Body.cpp index b1b3fa884b..25da820e21 100644 --- a/src/Ext/BuildingType/Body.cpp +++ b/src/Ext/BuildingType/Body.cpp @@ -217,6 +217,7 @@ void BuildingTypeExt::LoadFromINIFile(CCINIClass* const pINI) this->Units_UseRepairCost.Read(exINI, pSection, "Units.UseRepairCost"); this->NoBuildAreaOnBuildup.Read(exINI, pSection, "NoBuildAreaOnBuildup"); + this->NoAlphaImageOnBuildup.Read(exINI, pSection, "NoAlphaImageOnBuildup"); this->Adjacent_Allowed.Read(exINI, pSection, "Adjacent.Allowed"); this->Adjacent_Disallowed.Read(exINI, pSection, "Adjacent.Disallowed"); this->Adjacent_Disallowed_Prohibit.Read(exINI, pSection, "Adjacent.Disallowed.Prohibit"); @@ -408,6 +409,7 @@ void BuildingTypeExt::Serialize(T& Stm) .Process(this->Units_RepairPercent) .Process(this->Units_UseRepairCost) .Process(this->NoBuildAreaOnBuildup) + .Process(this->NoAlphaImageOnBuildup) .Process(this->Adjacent_Allowed) .Process(this->Adjacent_Disallowed) .Process(this->Adjacent_Disallowed_Prohibit) diff --git a/src/Ext/BuildingType/Body.h b/src/Ext/BuildingType/Body.h index 9a0733ccb0..db751add7a 100644 --- a/src/Ext/BuildingType/Body.h +++ b/src/Ext/BuildingType/Body.h @@ -81,6 +81,7 @@ class BuildingTypeExt final : public TechnoTypeExt Nullable Units_UseRepairCost; Valueable NoBuildAreaOnBuildup; + Nullable NoAlphaImageOnBuildup; ValueableVector Adjacent_Allowed; ValueableVector Adjacent_Disallowed; Valueable Adjacent_Disallowed_Prohibit; @@ -188,6 +189,7 @@ class BuildingTypeExt final : public TechnoTypeExt , Units_RepairPercent {} , Units_UseRepairCost {} , NoBuildAreaOnBuildup { false } + , NoAlphaImageOnBuildup {} , Adjacent_Allowed {} , Adjacent_Disallowed {} , Adjacent_Disallowed_Prohibit { false } diff --git a/src/Ext/Rules/Body.cpp b/src/Ext/Rules/Body.cpp index 5cf6099f5f..14d71fb3bd 100644 --- a/src/Ext/Rules/Body.cpp +++ b/src/Ext/Rules/Body.cpp @@ -590,6 +590,8 @@ void RulesExt::ExtData::LoadBeforeTypeData(RulesClass* pThis, CCINIClass* pINI) this->PoseDir_Production.Read(exINI, GameStrings::AudioVisual, "PoseDir.Production"); this->PoseDir_Field.Read(exINI, GameStrings::AudioVisual, "PoseDir.Field"); + this->NoAlphaImageOnBuildup.Read(exINI, GameStrings::AudioVisual, "NoAlphaImageOnBuildup"); + // Section AITargetTypes int itemsCount = pINI->GetKeyCount("AITargetTypes"); for (int i = 0; i < itemsCount; ++i) @@ -1058,6 +1060,7 @@ void RulesExt::ExtData::Serialize(T& Stm) .Process(this->AircraftDockingDir_DefaultToPoseDir) .Process(this->PoseDir_Production) .Process(this->PoseDir_Field) + .Process(this->NoAlphaImageOnBuildup) ; } diff --git a/src/Ext/Rules/Body.h b/src/Ext/Rules/Body.h index 136cf87f17..3503e39467 100644 --- a/src/Ext/Rules/Body.h +++ b/src/Ext/Rules/Body.h @@ -523,6 +523,8 @@ class RulesExt Nullable PoseDir_Production; Nullable PoseDir_Field; + Valueable NoAlphaImageOnBuildup; + ExtData(RulesClass* OwnerObject) : Extension(OwnerObject) , Storage_TiberiumIndex { -1 } , HarvesterDumpAmount { 0.0f } @@ -980,6 +982,8 @@ class RulesExt , AircraftDockingDir_DefaultToPoseDir{ true } , PoseDir_Production {} , PoseDir_Field{} + + , NoAlphaImageOnBuildup { false } { } virtual ~ExtData() = default; diff --git a/src/Misc/Hooks.AlphaImage.cpp b/src/Misc/Hooks.AlphaImage.cpp index 32213aca8b..8102b4f5e7 100644 --- a/src/Misc/Hooks.AlphaImage.cpp +++ b/src/Misc/Hooks.AlphaImage.cpp @@ -72,8 +72,13 @@ static void __fastcall UpdateAlphaShape(ObjectClass* pSource) const auto pBuilding = abstract_cast(pSource); - if (pBuilding && !inactive && pBuilding->GetCurrentMission() != Mission::Construction) - inactive |= !pBuilding->IsPowerOnline() || BuildingExt::Fetch(pBuilding)->LimboID != -1; + if (pBuilding && !inactive) + { + if (pBuilding->GetCurrentMission() != Mission::Construction) + inactive |= !pBuilding->IsPowerOnline() || BuildingExt::Fetch(pBuilding)->LimboID != -1; + else if (BuildingTypeExt::Fetch(pBuilding->Type)->NoAlphaImageOnBuildup.Get(RulesExt::Global()->NoAlphaImageOnBuildup)) + inactive = true; + } auto& alphaExt = *AresFunctions::AlphaExtMap;