From 30d57d114c88d669b51ae8aa398d9bef7aa80354 Mon Sep 17 00:00:00 2001 From: Stan Date: Sun, 22 Sep 2024 18:35:32 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Allow=20buildings=20to=20adapt?= =?UTF-8?q?=20to=20their=20map?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../structures/britons/barracks_struct1.xml | 22 +++-- .../celts/blacksmith_armorstand_wood.xml | 12 +++ .../celts/blacksmith_bucket_water.xml | 16 +++- .../actors/props/structures/celts/special.xml | 20 ++++- .../structures/gauls/farmstead_struct1.xml | 22 +++-- .../carthaginians/embassy_celtic.xml | 12 +++ .../art/actors/structures/celts/barracks.xml | 12 +++ .../actors/structures/celts/civic_centre.xml | 12 +++ .../art/actors/structures/celts/dock.xml | 12 +++ .../art/actors/structures/celts/farmstead.xml | 22 +++-- .../art/actors/structures/celts/homestead.xml | 12 +++ .../art/actors/structures/celts/house.xml | 20 ++++- .../art/actors/structures/celts/hut.xml | 12 +++ .../art/actors/structures/celts/kennel.xml | 22 +++-- .../actors/structures/celts/market_newest.xml | 20 ++++- .../actors/structures/celts/plot_corral.xml | 12 +++ .../actors/structures/celts/storehouse.xml | 12 +++ .../art/actors/structures/celts/temple.xml | 14 +++- .../art/actors/structures/fndn_celt_dock.xml | 12 +++ .../actors/structures/gauls/civic_centre.xml | 12 +++ .../art/actors/structures/gauls/house.xml | 12 +++ .../art/actors/structures/gauls/market.xml | 12 +++ .../actors/structures/gauls/scout_tower.xml | 12 +++ .../maps/skirmishes/alpine_valleys_2p.xml | 4 +- .../simulation/components/BiomeManager.js | 43 ++++++++++ .../simulation/components/BiomeReplacer.js | 83 +++++++++++++++++++ .../components/interfaces/BiomeManager.js | 1 + .../components/interfaces/BiomeReplacer.js | 1 + .../public/simulation/helpers/InitGame.js | 5 ++ .../templates/special/filter/construction.xml | 1 + .../templates/special/filter/preview.xml | 1 + .../templates/structures/gaul/house.xml | 8 ++ 32 files changed, 456 insertions(+), 37 deletions(-) create mode 100644 binaries/data/mods/public/simulation/components/BiomeManager.js create mode 100644 binaries/data/mods/public/simulation/components/BiomeReplacer.js create mode 100644 binaries/data/mods/public/simulation/components/interfaces/BiomeManager.js create mode 100644 binaries/data/mods/public/simulation/components/interfaces/BiomeReplacer.js diff --git a/binaries/data/mods/public/art/actors/props/structures/britons/barracks_struct1.xml b/binaries/data/mods/public/art/actors/props/structures/britons/barracks_struct1.xml index 9398e265c3..d3f64ac5d7 100644 --- a/binaries/data/mods/public/art/actors/props/structures/britons/barracks_struct1.xml +++ b/binaries/data/mods/public/art/actors/props/structures/britons/barracks_struct1.xml @@ -5,11 +5,23 @@ props/brit_barracks_struct1.dae - - - - - + + + + + + + + + + + + + + + + + player_trans_ao_parallax_spec.xml diff --git a/binaries/data/mods/public/art/actors/props/structures/celts/blacksmith_armorstand_wood.xml b/binaries/data/mods/public/art/actors/props/structures/celts/blacksmith_armorstand_wood.xml index 38256a3b05..beb9893130 100644 --- a/binaries/data/mods/public/art/actors/props/structures/celts/blacksmith_armorstand_wood.xml +++ b/binaries/data/mods/public/art/actors/props/structures/celts/blacksmith_armorstand_wood.xml @@ -11,5 +11,17 @@ + + + + + + + + + + + + player_trans_parallax_spec.xml diff --git a/binaries/data/mods/public/art/actors/props/structures/celts/blacksmith_bucket_water.xml b/binaries/data/mods/public/art/actors/props/structures/celts/blacksmith_bucket_water.xml index 416e178384..940b2316a1 100644 --- a/binaries/data/mods/public/art/actors/props/structures/celts/blacksmith_bucket_water.xml +++ b/binaries/data/mods/public/art/actors/props/structures/celts/blacksmith_bucket_water.xml @@ -5,8 +5,20 @@ props/celt_blacksmith_bucket_water.dae - - + + + + + + + + + + + + + + player_water.xml diff --git a/binaries/data/mods/public/art/actors/props/structures/celts/special.xml b/binaries/data/mods/public/art/actors/props/structures/celts/special.xml index c93dae2b9c..ea0a7e4f34 100644 --- a/binaries/data/mods/public/art/actors/props/structures/celts/special.xml +++ b/binaries/data/mods/public/art/actors/props/structures/celts/special.xml @@ -5,10 +5,22 @@ props/celt_sb_roof.dae - - - - + + + + + + + + + + + + + + + + player_trans_parallax_spec.xml diff --git a/binaries/data/mods/public/art/actors/props/structures/gauls/farmstead_struct1.xml b/binaries/data/mods/public/art/actors/props/structures/gauls/farmstead_struct1.xml index 8392c5c710..5e84dfdeec 100644 --- a/binaries/data/mods/public/art/actors/props/structures/gauls/farmstead_struct1.xml +++ b/binaries/data/mods/public/art/actors/props/structures/gauls/farmstead_struct1.xml @@ -5,11 +5,23 @@ props/gaul_farmstead_struct1.dae - - - - - + + + + + + + + + + + + + + + + + player_trans_ao_parallax_spec.xml diff --git a/binaries/data/mods/public/art/actors/structures/carthaginians/embassy_celtic.xml b/binaries/data/mods/public/art/actors/structures/carthaginians/embassy_celtic.xml index 411be19333..92a88db1dc 100644 --- a/binaries/data/mods/public/art/actors/structures/carthaginians/embassy_celtic.xml +++ b/binaries/data/mods/public/art/actors/structures/carthaginians/embassy_celtic.xml @@ -24,6 +24,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/barracks.xml b/binaries/data/mods/public/art/actors/structures/celts/barracks.xml index 8f018fb174..045b13511e 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/barracks.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/barracks.xml @@ -19,6 +19,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/civic_centre.xml b/binaries/data/mods/public/art/actors/structures/celts/civic_centre.xml index be4d5ad39b..7e3b3930fd 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/civic_centre.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/civic_centre.xml @@ -17,6 +17,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/dock.xml b/binaries/data/mods/public/art/actors/structures/celts/dock.xml index d83916f7e0..90a9494abb 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/dock.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/dock.xml @@ -16,6 +16,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/farmstead.xml b/binaries/data/mods/public/art/actors/structures/celts/farmstead.xml index bd4ee59c24..623e713e46 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/farmstead.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/farmstead.xml @@ -11,11 +11,23 @@ - - - - - + + + + + + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/homestead.xml b/binaries/data/mods/public/art/actors/structures/celts/homestead.xml index bd1b0564c4..bbf719a586 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/homestead.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/homestead.xml @@ -19,6 +19,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/house.xml b/binaries/data/mods/public/art/actors/structures/celts/house.xml index 13dc16b724..b3b8d13061 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/house.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/house.xml @@ -24,13 +24,25 @@ + + + + + + + + + + + + - - - - + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/hut.xml b/binaries/data/mods/public/art/actors/structures/celts/hut.xml index 2f9d0a8772..c24fd8f8d4 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/hut.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/hut.xml @@ -15,6 +15,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/kennel.xml b/binaries/data/mods/public/art/actors/structures/celts/kennel.xml index 3c1ae0b322..af2e343a55 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/kennel.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/kennel.xml @@ -11,11 +11,23 @@ - - - - - + + + + + + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/market_newest.xml b/binaries/data/mods/public/art/actors/structures/celts/market_newest.xml index d16a0316e0..7e7414aa1b 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/market_newest.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/market_newest.xml @@ -12,10 +12,22 @@ - - - - + + + + + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/plot_corral.xml b/binaries/data/mods/public/art/actors/structures/celts/plot_corral.xml index 99863ec6ae..380facf0c7 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/plot_corral.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/plot_corral.xml @@ -18,6 +18,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/storehouse.xml b/binaries/data/mods/public/art/actors/structures/celts/storehouse.xml index 65348d49d1..0d9c4dc6a0 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/storehouse.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/storehouse.xml @@ -17,6 +17,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/celts/temple.xml b/binaries/data/mods/public/art/actors/structures/celts/temple.xml index beb1427513..60b17a3c27 100644 --- a/binaries/data/mods/public/art/actors/structures/celts/temple.xml +++ b/binaries/data/mods/public/art/actors/structures/celts/temple.xml @@ -18,7 +18,19 @@ - + + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/fndn_celt_dock.xml b/binaries/data/mods/public/art/actors/structures/fndn_celt_dock.xml index 65e3d2fb73..daa160efe8 100644 --- a/binaries/data/mods/public/art/actors/structures/fndn_celt_dock.xml +++ b/binaries/data/mods/public/art/actors/structures/fndn_celt_dock.xml @@ -14,5 +14,17 @@ + + + + + + + + + + + + no_trans_norm_spec.xml diff --git a/binaries/data/mods/public/art/actors/structures/gauls/civic_centre.xml b/binaries/data/mods/public/art/actors/structures/gauls/civic_centre.xml index 5ef30b7836..5a097b69c7 100644 --- a/binaries/data/mods/public/art/actors/structures/gauls/civic_centre.xml +++ b/binaries/data/mods/public/art/actors/structures/gauls/civic_centre.xml @@ -18,6 +18,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/gauls/house.xml b/binaries/data/mods/public/art/actors/structures/gauls/house.xml index a21084d164..94d23841cd 100644 --- a/binaries/data/mods/public/art/actors/structures/gauls/house.xml +++ b/binaries/data/mods/public/art/actors/structures/gauls/house.xml @@ -10,6 +10,18 @@ + + + + + + + + + + + + structural/gaul_house_a.dae diff --git a/binaries/data/mods/public/art/actors/structures/gauls/market.xml b/binaries/data/mods/public/art/actors/structures/gauls/market.xml index 879c358304..cbe4f2bd19 100644 --- a/binaries/data/mods/public/art/actors/structures/gauls/market.xml +++ b/binaries/data/mods/public/art/actors/structures/gauls/market.xml @@ -18,6 +18,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/art/actors/structures/gauls/scout_tower.xml b/binaries/data/mods/public/art/actors/structures/gauls/scout_tower.xml index acdb2d2d8e..95088c2ca1 100644 --- a/binaries/data/mods/public/art/actors/structures/gauls/scout_tower.xml +++ b/binaries/data/mods/public/art/actors/structures/gauls/scout_tower.xml @@ -33,6 +33,18 @@ + + + + + + + + + + + + diff --git a/binaries/data/mods/public/maps/skirmishes/alpine_valleys_2p.xml b/binaries/data/mods/public/maps/skirmishes/alpine_valleys_2p.xml index c2a6e6231f..c0660a6559 100644 --- a/binaries/data/mods/public/maps/skirmishes/alpine_valleys_2p.xml +++ b/binaries/data/mods/public/maps/skirmishes/alpine_valleys_2p.xml @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a2ae0949134027744a90082e70c4c72ff4d5bab269d4fcb07b4bc95cd9254a0 -size 454876 +oid sha256:5132a75874dc063e0da91923bcb67d23520fcadd51cb45cd1355896d0c1e4e99 +size 454915 diff --git a/binaries/data/mods/public/simulation/components/BiomeManager.js b/binaries/data/mods/public/simulation/components/BiomeManager.js new file mode 100644 index 0000000000..2f534eb387 --- /dev/null +++ b/binaries/data/mods/public/simulation/components/BiomeManager.js @@ -0,0 +1,43 @@ +/** + * A manager class for biomes. + * @class + * @constructor + */ +function BiomeManager() {} + +/** + * Defines the XML schema and help strings of the manager. + * @memberof BiomeManager + */ +BiomeManager.prototype.Schema = + ""; + +/** + * Initializes the current map's biome. + * @memberof BiomeManager + */ +BiomeManager.prototype.Init = function() +{ + this.biome = ""; +} + +/** + * Sets the current map's biome. + * @param {string} biome - The new biome. + * @memberof BiomeManager + */ +BiomeManager.prototype.SetBiome = function(biome) +{ + this.biome = biome; +} + +/** + * Returns the current map's biome. + * @memberof BiomeManager + */ +BiomeManager.prototype.GetBiome = function() +{ + return this.biome; +} + +Engine.RegisterSystemComponentType(IID_BiomeManager, "BiomeManager", BiomeManager); diff --git a/binaries/data/mods/public/simulation/components/BiomeReplacer.js b/binaries/data/mods/public/simulation/components/BiomeReplacer.js new file mode 100644 index 0000000000..67462c5fa8 --- /dev/null +++ b/binaries/data/mods/public/simulation/components/BiomeReplacer.js @@ -0,0 +1,83 @@ +/** + * A manager class for biomes. + * @class + * @constructor + */ +function BiomeReplacer() {} + +/** + * Defines the XML schema and help strings of the component. + * @memberof BiomeReplacer + */ +BiomeReplacer.prototype.Schema = ` + Defines the variants an entity can assume depending on a map biome. + + + + generic/alpine + winter + + + + + + + + + + + tokens + + + + + + + + + + `; + +/** + * Initializes the biome replacer. + * @memberof BiomeReplacer + */ +BiomeReplacer.prototype.Init = function() +{ + +} + + +/** + * @param {{ "from": number, "to": number }} msg - Message containing the old new owner. + * @memberof BiomeReplacer + */ +BiomeReplacer.prototype.OnCreate = function(msg) +{ + + const currentBiome = Engine.QueryInterface(SYSTEM_ENTITY, IID_BiomeManager)?.GetBiome(); + + if (!currentBiome) + return; + + let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual); + + if (!cmpVisual) + return; + + for (const variantName of Object.keys(this.template.Variants)) + { + const variant = this.template.Variants[variantName]; + if (!variant.AffectedBiomes || !variant.AffectedBiomes._string) + continue; + + const affectedBiomes = variant.AffectedBiomes._string.split(" "); + if (affectedBiomes.indexOf(currentBiome) !== -1) + { + cmpVisual.SelectAnimation(variant.ActorVariant, false, 1.0); + return; + } + } +}; + +Engine.RegisterComponentType(IID_BiomeReplacer, "BiomeReplacer", BiomeReplacer); diff --git a/binaries/data/mods/public/simulation/components/interfaces/BiomeManager.js b/binaries/data/mods/public/simulation/components/interfaces/BiomeManager.js new file mode 100644 index 0000000000..90ca6f9c74 --- /dev/null +++ b/binaries/data/mods/public/simulation/components/interfaces/BiomeManager.js @@ -0,0 +1 @@ +Engine.RegisterInterface("BiomeManager"); diff --git a/binaries/data/mods/public/simulation/components/interfaces/BiomeReplacer.js b/binaries/data/mods/public/simulation/components/interfaces/BiomeReplacer.js new file mode 100644 index 0000000000..ed09a64773 --- /dev/null +++ b/binaries/data/mods/public/simulation/components/interfaces/BiomeReplacer.js @@ -0,0 +1 @@ +Engine.RegisterInterface("BiomeReplacer"); diff --git a/binaries/data/mods/public/simulation/helpers/InitGame.js b/binaries/data/mods/public/simulation/helpers/InitGame.js index b083bc370d..9cff4c07c3 100644 --- a/binaries/data/mods/public/simulation/helpers/InitGame.js +++ b/binaries/data/mods/public/simulation/helpers/InitGame.js @@ -41,6 +41,11 @@ function InitGame(settings) cmpRangeManager.ExploreMap(i); } + if (settings.Biome) + { + Engine.QueryInterface(SYSTEM_ENTITY, IID_BiomeManager)?.SetBiome(settings.Biome); + } + const cmpAIManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AIManager); for (let i = 0; i < settings.PlayerData.length; ++i) { diff --git a/binaries/data/mods/public/simulation/templates/special/filter/construction.xml b/binaries/data/mods/public/simulation/templates/special/filter/construction.xml index 24b3b2ee51..e6d0e0e1a5 100644 --- a/binaries/data/mods/public/simulation/templates/special/filter/construction.xml +++ b/binaries/data/mods/public/simulation/templates/special/filter/construction.xml @@ -5,4 +5,5 @@ + diff --git a/binaries/data/mods/public/simulation/templates/special/filter/preview.xml b/binaries/data/mods/public/simulation/templates/special/filter/preview.xml index 53984d80c9..0b53e6ed7a 100644 --- a/binaries/data/mods/public/simulation/templates/special/filter/preview.xml +++ b/binaries/data/mods/public/simulation/templates/special/filter/preview.xml @@ -1,5 +1,6 @@ + diff --git a/binaries/data/mods/public/simulation/templates/structures/gaul/house.xml b/binaries/data/mods/public/simulation/templates/structures/gaul/house.xml index 6306502807..3438322a06 100644 --- a/binaries/data/mods/public/simulation/templates/structures/gaul/house.xml +++ b/binaries/data/mods/public/simulation/templates/structures/gaul/house.xml @@ -1,5 +1,13 @@ + + + + generic/alpine + winter + + + gaul Tegia