diff --git a/IGP/Pages/BuildCalculator/BuildCalculatorPage.razor b/IGP/Pages/BuildCalculator/BuildCalculatorPage.razor
index a12a4c9..2307c04 100644
--- a/IGP/Pages/BuildCalculator/BuildCalculatorPage.razor
+++ b/IGP/Pages/BuildCalculator/BuildCalculatorPage.razor
@@ -25,6 +25,11 @@
Build Calculator hasn't been thoroughly tested. Bugs and inaccurate results assumed.
Currently not considering running out of alloy and ether to harvest.
+
+
+ Build Calculator was built based on a much older version of the game and was only quickly modified for the June 2025 Playtest version, so the above disclaimer is only more true.
+
+ Expect even more oddities and invalid data then the above warning implies.
diff --git a/IGP/Pages/BuildCalculator/Parts/FilterComponent.razor b/IGP/Pages/BuildCalculator/Parts/FilterComponent.razor
index 2efaf0a..afde8dd 100644
--- a/IGP/Pages/BuildCalculator/Parts/FilterComponent.razor
+++ b/IGP/Pages/BuildCalculator/Parts/FilterComponent.razor
@@ -32,6 +32,11 @@
}
@if (FilterService.GetFaction() == DataType.FACTION_Aru)
{
+
+
+ Atzlan
+
Mala
diff --git a/IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor b/IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor
index ac75422..bd4a3a1 100644
--- a/IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor
+++ b/IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor
@@ -22,13 +22,13 @@
var color = (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
- ? "#0a0f12"
+ ? hotkey.GetColor()
: hotkey.GetColor();
var x = hotkey.PositionX * Size;
var y = hotkey.PositionY * Size + (hotkey.PositionY == 0 ? 5 : -50);
- var width = Size;
+ var width = Size * hotkey.Width;
var height = hotkey.PositionY == 0 ? 50 : Size;
var borderRadius = hotkey.PositionY == 0 ? 12 : 0;
@@ -52,7 +52,7 @@
var keyText = hotkey.KeyText.Equals("CAPSLOCK") ? "Caps"
: hotkey.KeyText.Equals("CONTROL") ? "Ctrl"
: hotkey.KeyText.Equals("SHIFT") ? "Shift"
- : hotkey.KeyText.Equals("TAB") ? "Tab"
+ : hotkey.KeyText.Equals("X") ? "X"
: hotkey.KeyText.Equals("SPACE") ? "Space" : hotkey.KeyText;
@@ -292,9 +292,9 @@
controlGroup = "Z";
}
- if (KeyService.GetAllPressedKeys().Contains("TAB"))
+ if (KeyService.GetAllPressedKeys().Contains("X"))
{
- controlGroup = "TAB";
+ controlGroup = "X";
}
if (KeyService.GetAllPressedKeys().Contains("C"))
diff --git a/Model/BuildOrders/BuildToCompareModel.cs b/Model/BuildOrders/BuildToCompareModel.cs
index 9502806..4779a10 100644
--- a/Model/BuildOrders/BuildToCompareModel.cs
+++ b/Model/BuildOrders/BuildToCompareModel.cs
@@ -20,12 +20,7 @@ public class BuildToCompareModel
Faction.Equals(DataType.FACTION_QRath)
? DataType.BUPGRADE_MiningLevel2_QRath
: DataType.BUPGRADE_MiningLevel2_Aru];
-
- public EntityModel GetTownHallMining3Entity => DATA.Get()[
- Faction.Equals(DataType.FACTION_QRath)
- ? DataType.BUPGRADE_MiningLevel3_QRath
- : DataType.BUPGRADE_MiningLevel3_Aru];
-
+
public int NumberOfTownHallExpansions
{
get => numberOfTownHallExpansions;
diff --git a/Model/Entity/Data/DATA.cs b/Model/Entity/Data/DATA.cs
index fa2a2e2..412ee70 100644
--- a/Model/Entity/Data/DATA.cs
+++ b/Model/Entity/Data/DATA.cs
@@ -243,7 +243,7 @@ public abstract class DATA
{
DataType.IMMORTAL_Atzlan,
new EntityModel(DataType.IMMORTAL_Atzlan, EntityType.Immortal)
- .AddPart(new EntityInfoModel { Name = "Aru" })
+ .AddPart(new EntityInfoModel { Name = "Atzlan" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityHarvestModel
{
@@ -747,12 +747,12 @@ public abstract class DATA
.AddPart(new EntityMovementModel { Speed = 360, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{
- Damage = 25, MediumDamage = 35, HeavyDamage = 45, Range = 800, AttacksPerSecond = 1.429f,
+ Damage = 25, MediumDamage = 35, HeavyDamage = 45, Range = 800, SecondsBetweenAttacks = 1.429f,
Targets = TargetType.Ground
})
.AddPart(new EntityWeaponModel
{
- Damage = 85, MediumDamage = 100, HeavyDamage = 115, Range = 1000, AttacksPerSecond = 2.5f,
+ Damage = 85, MediumDamage = 100, HeavyDamage = 115, Range = 1000, SecondsBetweenAttacks = 2.5f,
MinimumRange = 500,
Targets = TargetType.Ground
})
@@ -3650,7 +3650,7 @@ public abstract class DATA
Name = "Mining Level 2", Descriptive = DescriptiveType.Upgrade,
Description = "Upgrades the nearest resource cluster to allow more workers to mine from it."
})
- .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "CONTROL" })
+ .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "CONTROL" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityRequirementModel
{
@@ -3664,6 +3664,50 @@ public abstract class DATA
TotalAmount = 3600
})
},
+ {
+ DataType.CONVERSION_EtherSruge_Aru,
+ new EntityModel(DataType.CONVERSION_EtherSruge_Aru, EntityType.Building_Upgrade)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Ether Surge", Descriptive = DescriptiveType.Upgrade,
+ Description = "Gain 100 Ether over 50 seconds"
+ })
+ .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "CONTROL" })
+ .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
+ .AddPart(new EntityRequirementModel
+ {
+ Id = DataType.BUILDING_Acropolis,
+ Requirement = RequirementType.Morph
+ })
+ .AddPart(new EntityProductionModel { Alloy = 50, Cooldown = 50, RequiresWorker = false })
+ .AddPart(new EntityHarvestModel
+ {
+ HarvestedPerInterval = 5, RequiresWorker = false, Resource = ResourceType.Ether, Slots = 1,
+ TotalAmount = 100
+ })
+ },
+ {
+ DataType.CONVERSION_EtherSruge_QRath,
+ new EntityModel(DataType.CONVERSION_EtherSruge_QRath, EntityType.Building_Upgrade)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Ether Surge", Descriptive = DescriptiveType.Upgrade,
+ Description = "Gain 100 Ether over 50 seconds"
+ })
+ .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "CONTROL" })
+ .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
+ .AddPart(new EntityRequirementModel
+ {
+ Id = DataType.BUILDING_Acropolis,
+ Requirement = RequirementType.Morph
+ })
+ .AddPart(new EntityProductionModel { Alloy = 50, Cooldown = 50, RequiresWorker = false })
+ .AddPart(new EntityHarvestModel
+ {
+ HarvestedPerInterval = 5, RequiresWorker = false, Resource = ResourceType.Ether, Slots = 1,
+ TotalAmount = 100
+ })
+ },
{
DataType.BUILDING_ApostleOfBinding,
@@ -3918,7 +3962,7 @@ public abstract class DATA
DataType.BUPGRADE_GodHeart,
new EntityModel(DataType.BUPGRADE_GodHeart, EntityType.Building_Upgrade)
.AddPart(new EntityInfoModel { Name = "God Heart", Descriptive = DescriptiveType.Upgrade })
- .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "CONTROL" })
+ .AddPart(new EntityHotkeyModel { Hotkey = "A", HotkeyGroup = "CONTROL" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityVitalityModel
{ Health = 3100, DefenseLayer = 900, Armor = ArmorType.Heavy, IsStructure = true })
@@ -3944,7 +3988,7 @@ public abstract class DATA
Name = "Mining Level 2", Descriptive = DescriptiveType.Upgrade,
Description = "Upgrades the nearest resource cluster to allow more workers to mine from it."
})
- .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "CONTROL" })
+ .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "CONTROL" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityRequirementModel
{
diff --git a/Model/Entity/Data/Ids_Entity.cs b/Model/Entity/Data/Ids_Entity.cs
index ea5e132..3b5bc62 100644
--- a/Model/Entity/Data/Ids_Entity.cs
+++ b/Model/Entity/Data/Ids_Entity.cs
@@ -84,10 +84,13 @@ public static class DataType
public static string BUILDING_ApostleOfBinding = nameof(BUILDING_ApostleOfBinding);
public static string BUILDING_GroveHeart = nameof(BUILDING_GroveHeart);
public static string BUILDING_EtherMaw = nameof(BUILDING_EtherMaw);
- public static string BUPGRADE_MiningLevel2_QRath = "d7beb217-8eaf-4f88-8882-05bd7e0fbebd";
- public static string BUPGRADE_MiningLevel3_QRath = "2b7d0da9-a897-4d3e-b9bd-3ec4a7c95d2c";
- public static string BUPGRADE_MiningLevel2_Aru = "ffa76506-470b-4a67-acc6-3dc9686df004";
- public static string BUPGRADE_MiningLevel3_Aru = "010b3279-472d-4d54-9a85-ebc5c664ee73";
+
+ public static string BUPGRADE_MiningLevel2_QRath = nameof(BUPGRADE_MiningLevel2_QRath);
+ public static string BUPGRADE_MiningLevel2_Aru = nameof(BUPGRADE_MiningLevel2_Aru);
+ public static string CONVERSION_EtherSruge_QRath = nameof(CONVERSION_EtherSruge_QRath);
+ public static string CONVERSION_EtherSruge_Aru = nameof(CONVERSION_EtherSruge_Aru);
+
+
public static string BUPGRADE_GodHeart = nameof(BUPGRADE_GodHeart);
public static string BUPGRADE_Omnivore = nameof(BUPGRADE_Omnivore);
public static string BUILDING_LegionHall = nameof(BUILDING_LegionHall);
diff --git a/Model/Hotkeys/HotKeyType.cs b/Model/Hotkeys/HotKeyType.cs
index bf65a1a..b8cc626 100644
--- a/Model/Hotkeys/HotKeyType.cs
+++ b/Model/Hotkeys/HotKeyType.cs
@@ -4,6 +4,12 @@ public enum KeyType
{
Action,
ControlGroup,
+
+ Army,
+ Train,
+ Research,
+ Construct,
+
Cancel,
Advance,
Economy,
diff --git a/Model/Hotkeys/HotkeyModel.cs b/Model/Hotkeys/HotkeyModel.cs
index 2ef8ff3..7360c7e 100644
--- a/Model/Hotkeys/HotkeyModel.cs
+++ b/Model/Hotkeys/HotkeyModel.cs
@@ -4,22 +4,31 @@ namespace Model.Hotkeys;
public class HotkeyModel
{
- public static readonly string[] KeyGroups = { "Z", "1", "2", "TAB", "CONTROL", "SHIFT", "C" };
- public static readonly string[] HotKeys = { "`", "Q", "W", "E", "R", "A", "S", "F", "X", "V", "CAPSLOCK" };
+ public static readonly string[] KeyGroups = { "Z", "1", "2", "X", "CONTROL", "SHIFT", "C" };
+ public static readonly string[] HotKeys = { "`", "Q", "W", "E", "R", "A", "S", "F", "X", "V", "CAPSLOCK", "TAB" };
public string KeyText { get; set; }
public KeyType KeyType { get; set; }
public int PositionX { get; set; }
public int PositionY { get; set; }
public bool IsHidden { get; set; }
+ public int Width { get; set; } = 1;
+
public string GetColor()
{
return KeyType == KeyType.Action ? "#404146"
: KeyType == KeyType.Cancel ? "#621b1b"
: KeyType == KeyType.ControlGroup ? "#443512"
+
+ : KeyType == KeyType.Army ? "#443512"
+ : KeyType == KeyType.Train ? "#124443"
+ : KeyType == KeyType.Research ? "#221244"
+ : KeyType == KeyType.Construct ? "#122844"
+ : KeyType == KeyType.Pyre ? "#441212"
+
: KeyType == KeyType.Advance ? "#23262c"
: KeyType == KeyType.Economy ? "#262c23"
- : KeyType == KeyType.Pyre ? "#440e2c"
+
: "#37393F";
}
@@ -30,45 +39,51 @@ public class HotkeyModel
new()
{
KeyText = "Z",
- KeyType = KeyType.ControlGroup,
- PositionX = 0,
- PositionY = 0
+ KeyType = KeyType.Train,
+ PositionX = 1,
+ PositionY = 3
},
new()
{
KeyText = "D",
- KeyType = KeyType.ControlGroup,
- PositionX = 1,
- PositionY = 0
+ KeyType = KeyType.Army,
+ PositionX = 3,
+ PositionY = 2
},
new()
{
KeyText = "C",
- KeyType = KeyType.ControlGroup,
- PositionX = 2,
- PositionY = 0
+ KeyType = KeyType.Construct,
+ PositionX = 3,
+ PositionY = 3
},
new()
{
KeyText = "V",
KeyType = KeyType.Pyre,
- PositionX = 3,
- PositionY = 0
+ PositionX = 4,
+ PositionY = 3
},
new()
{
- KeyText = "TAB",
- KeyType = KeyType.ControlGroup,
- PositionX = 4,
- PositionY = 0
+ KeyText = "X",
+ KeyType = KeyType.Research,
+ PositionX = 2,
+ PositionY = 3
},
-
-
new()
{
KeyText = "`",
KeyType = KeyType.Cancel,
PositionX = 0,
+ PositionY = 0
+ },
+
+ new()
+ {
+ KeyText = "TAB",
+ KeyType = KeyType.Action,
+ PositionX = 0,
PositionY = 1
},
@@ -143,7 +158,8 @@ public class HotkeyModel
KeyText = "SPACE",
KeyType = KeyType.Advance,
PositionX = 1,
- PositionY = 3
+ PositionY = 4,
+ Width = 4
},
// Economy
new()
diff --git a/Services/Immortal/EconomyComparisonService.cs b/Services/Immortal/EconomyComparisonService.cs
index 2b92b9e..0d5e477 100644
--- a/Services/Immortal/EconomyComparisonService.cs
+++ b/Services/Immortal/EconomyComparisonService.cs
@@ -107,12 +107,9 @@ public class EconomyComparisionService : IEconomyComparisonService
{
var townHall = buildToCompare.GetTownHallEntity;
var townHallMining2 = buildToCompare.GetTownHallMining2Entity;
- var townHallMining3 = buildToCompare.GetTownHallMining3Entity;
Add(townHall, buildToCompare, time);
Add(townHallMining2, buildToCompare, time + townHall.Production()!.BuildTime);
- Add(townHallMining3, buildToCompare,
- time + townHall.Production()!.BuildTime + townHallMining2.Production()!.BuildTime);
}
CalculateEconomy(buildToCompare);