Add Province Improvements data and reference page; update navigation and documentation

This commit is contained in:
2026-05-25 17:18:16 -04:00
parent 7898d0bd3e
commit f80aae6387
8 changed files with 505 additions and 12 deletions
+6
View File
@@ -31,6 +31,12 @@
<span class="bi bi-book-fill-nav-menu" aria-hidden="true"></span> Magic Materials
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="/references/province-improvements">
<span class="bi bi-buildings-nav-menu" aria-hidden="true"></span> Province Improvements
</NavLink>
</div>
</nav>
</div>
@@ -0,0 +1,70 @@
@page "/references/province-improvements"
@using AOW4.Data
<div class="page-container">
<h1>Province Improvements Reference</h1>
<p class="subtitle">A reference view of the `ProvinceImprovement` data loaded from `ProvinceImprovementsData.RawData`.</p>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Name</th>
<th>Category</th>
<th>Source</th>
<th>Cost (Prod/Gold)</th>
<th>Effects</th>
<th>Requirements</th>
</tr>
</thead>
<tbody>
@foreach (var improvement in ProvinceImprovementsData.RawData)
{
<tr>
<td>@improvement.Name</td>
<td>@improvement.Category</td>
<td>@improvement.Source</td>
<td>@improvement.CostProduction / @improvement.CostGold</td>
<td><div class="preformatted">@improvement.Effects</div></td>
<td><div class="preformatted">@improvement.Requirements</div></td>
</tr>
}
</tbody>
</table>
</div>
</div>
@code {
}
<style>
.page-container {
padding: 2rem;
max-width: 1400px;
margin: 0 auto;
}
.subtitle {
color: #666;
margin-bottom: 1.5rem;
}
.table-responsive {
overflow-x: auto;
}
.preformatted {
white-space: pre-wrap;
font-family: var(--bs-font-sans-serif);
color: #333;
}
.table {
font-size: 0.9rem;
}
.table th {
background-color: #f8f9fa;
font-weight: 600;
}
</style>
+43
View File
@@ -0,0 +1,43 @@
namespace AOW4.Data;
/// <summary>
/// Represents a Province Improvement - a buildable enhancement that can be constructed in a province.
/// Each Province Improvement decreases stability by -5.
/// </summary>
public class ProvinceImprovement
{
/// <summary>
/// The name of the province improvement.
/// </summary>
public required string Name { get; set; }
/// <summary>
/// The base category/type (Conduit, Farm, Forester, Mine, Quarry, Research Post, Teleporter, Monument, etc.).
/// </summary>
public required string Category { get; set; }
/// <summary>
/// A description of the effects this improvement provides (resource bonuses, adjacency bonuses, special mechanics, etc.).
/// </summary>
public required string Effects { get; set; }
/// <summary>
/// Any requirements to build this improvement (terrain, resource nodes, Town Hall tier, etc.).
/// </summary>
public required string Requirements { get; set; }
/// <summary>
/// The source/culture/tome that grants this improvement (General, Barbarian, Feudal, High, Mystic, etc.).
/// </summary>
public required string Source { get; set; }
/// <summary>
/// The production cost to build this improvement.
/// </summary>
public int CostProduction { get; set; }
/// <summary>
/// The gold cost to build this improvement.
/// </summary>
public int CostGold { get; set; }
}
+341
View File
@@ -0,0 +1,341 @@
namespace AOW4.Data;
/// <summary>
/// Static raw data provider for Province Improvements.
/// </summary>
public static class ProvinceImprovementsData
{
public static List<ProvinceImprovement> RawData => new()
{
// Basic Province Improvements
new ProvinceImprovement
{
Name = "Conduit",
Category = "Conduit",
Effects = "+5 Mana",
Requirements = "Mana node, pearl reef, or magic material",
Source = "Base",
CostProduction = 0,
CostGold = 0
},
new ProvinceImprovement
{
Name = "Farm",
Category = "Farm",
Effects = "+5 Food",
Requirements = "Grassland or coast terrain, fungus fields (underground)",
Source = "Base",
CostProduction = 0,
CostGold = 0
},
new ProvinceImprovement
{
Name = "Forester",
Category = "Forester",
Effects = "+2 Food\n+3 Production",
Requirements = "Forest or mangrove forest terrain, mushroom forest (underground)",
Source = "Base",
CostProduction = 0,
CostGold = 0
},
new ProvinceImprovement
{
Name = "Hut",
Category = "Hut",
Effects = "+2 Food",
Requirements = "Ashlands, sand or snow terrain",
Source = "Base",
CostProduction = 0,
CostGold = 0
},
new ProvinceImprovement
{
Name = "Mine",
Category = "Mine",
Effects = "+5 Gold",
Requirements = "Gold vein, iron deposit, or pearl reef resource node",
Source = "Base",
CostProduction = 0,
CostGold = 0
},
new ProvinceImprovement
{
Name = "Quarry",
Category = "Quarry",
Effects = "+5 Production",
Requirements = "Cliff, rocky, or sunken ruins terrain; or iron deposit resource node",
Source = "Base",
CostProduction = 0,
CostGold = 0
},
new ProvinceImprovement
{
Name = "Research Post",
Category = "Research Post",
Effects = "+5 Knowledge",
Requirements = "Mana node, magic material or sunken ruins terrain",
Source = "Base",
CostProduction = 0,
CostGold = 0
},
// General Province Improvements
new ProvinceImprovement
{
Name = "Spell Jammer",
Category = "Conduit",
Effects = """
Enemies cannot target World Map Spells in this Domain.
Enemy Spells cost +100% Combat Casting Points in Combat in Domain.
-10 Mana.
""",
Requirements = "Must be built on an acquired province.\nRequires Town Hall III",
Source = "General",
CostProduction = 250,
CostGold = 100
},
new ProvinceImprovement
{
Name = "Teleporter",
Category = "Teleporter",
Effects = """
A Province Improvement which enables an Army to teleport from one teleporter to another.
-10 Mana.
""",
Requirements = "Must be built on an acquired province",
Source = "General",
CostProduction = 250,
CostGold = 100
},
// Cultural Province Improvements - Barbarian
new ProvinceImprovement
{
Name = "Forest of Stakes",
Category = "Forester",
Effects = """
+7 Food income.
+7 Production income.
+7 Draft per adjacent Forester.
Enemy Units in this Domain get Demoralized.
""",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Communal Tent",
Source = "Barbarian",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - Dark Cult of Death
new ProvinceImprovement
{
Name = "Masoleum",
Category = "Research Post",
Effects = """
+10 Knowledge income.
+3 Knowledge Production per adjacent Conduit.
""",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Dread Spire",
Source = "Dark - Cult of Death",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - Dark Cult of Tyranny
new ProvinceImprovement
{
Name = "Dark Forge",
Category = "Mine",
Effects = """
+10 Gold income.
+5 Production per adjacent Quarry, Mine, or Forester.
""",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Dread Spire",
Source = "Dark - Cult of Tyranny",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - Feudal
new ProvinceImprovement
{
Name = "Farmstead",
Category = "Farm",
Effects = """
+15 Food income.
+5 Food per adjacent Farm.
""",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Castle",
Source = "Feudal",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - High
new ProvinceImprovement
{
Name = "Sunshrine",
Category = "Research Post",
Effects = """
+10 Knowledge income.
+3 Knowledge per adjacent Research Post.
Friendly Units in this Domain are Encouraged.
""",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Atrium of Light",
Source = "High",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - Industrious
new ProvinceImprovement
{
Name = "Builder's Quarters",
Category = "Quarry",
Effects = """
+15 Production income.
+5 Production per adjacent Quarry.
""",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Bulwark",
Source = "Industrious",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - Mystic School of Attunement
new ProvinceImprovement
{
Name = "Mystic Abbey",
Category = "Conduit",
Effects = """
+10 Mana income.
+3 Knowledge per adjacent Conduit or Research Post.
""",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Mage's Plaza",
Source = "Mystic - School of Attunement",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - Mystic School of Summoning
new ProvinceImprovement
{
Name = "Astral Manalith",
Category = "Conduit",
Effects = """
+10 Mana income.
+5 Mana per adjacent Conduit or Research Post.
""",
Requirements = "Must be built on an acquired Province.\nRequires City Tier 2.\nRequires Town Hall II: Mage's Plaza",
Source = "Mystic - School of Summoning",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - Nomad Conquerors
new ProvinceImprovement
{
Name = "Warcamp",
Category = "Forester",
Effects = """
+15 Draft.
Pillaging adjacent provinces takes -1 Turn.
Friendly units in this and adjacent provinces gain +15 Hit Point regeneration per World Map Turn.
""",
Requirements = "Must be built on an annexed Province.\nRequires Town Hall II: Council Deck",
Source = "Nomad - Conquerors",
CostProduction = 130,
CostGold = 60
},
// Cultural Province Improvements - Nomad Scavengers
new ProvinceImprovement
{
Name = "Scavenging Camp",
Category = "Mine",
Effects = """
+10 Gold.
+10 Gold for this and each adjacent province containing a Resource Node.
""",
Requirements = "Must be built on an annexed Province.\nRequires Town Hall II: Council Deck",
Source = "Nomad - Scavengers",
CostProduction = 130,
CostGold = 60
},
// Primal Megalith improvements
new ProvinceImprovement
{
Name = "Ash Megalith",
Category = "Conduit",
Effects = "+6 Gold per adjacent Ashland Province",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Clan Lodge",
Source = "Primal - Ash Sabertooth",
CostProduction = 250,
CostGold = 100
},
new ProvinceImprovement
{
Name = "Dune Megalith",
Category = "Conduit",
Effects = "+4 Gold per adjacent Sand Province",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Clan Lodge",
Source = "Primal - Dune Serpent",
CostProduction = 250,
CostGold = 100
},
new ProvinceImprovement
{
Name = "Glacial Megalith",
Category = "Conduit",
Effects = "+6 Production per adjacent Snow Province",
Requirements = "Must be built on an acquired province.\nRequires Town Hall II: Clan Lodge",
Source = "Primal - Glacial Mammoth",
CostProduction = 250,
CostGold = 100
},
// Oathsworn Schools
new ProvinceImprovement
{
Name = "School of Contemplation",
Category = "Conduit",
Effects = """
+7 Mana.
+7 Knowledge.
+3 Knowledge per adjacent Conduit or Research Post.
""",
Requirements = "Must be built on an acquired Province.\nRequires Town Hall II: Oath Square",
Source = "Oathsworn - Oath of Harmony",
CostProduction = 250,
CostGold = 100
},
new ProvinceImprovement
{
Name = "School of Discipline",
Category = "Conduit",
Effects = """
+7 Mana.
+7 Draft.
+5 Draft per adjacent Quarry.
""",
Requirements = "Must be built on an acquired Province.\nRequires Town Hall II: Oath Square",
Source = "Oathsworn - Oath of Righteousness",
CostProduction = 250,
CostGold = 100
},
new ProvinceImprovement
{
Name = "School of Mastery",
Category = "Conduit",
Effects = """
+7 Mana.
+7 Draft.
Units produced in this city start with +1 Starting Rank.
""",
Requirements = "Must be built on an acquired Province.\nRequires Town Hall II: Oath Square",
Source = "Oathsworn - Oath of Strife",
CostProduction = 250,
CostGold = 100
}
};
}
+6
View File
@@ -31,6 +31,12 @@ public static class SectionsData
Title = "Magic Materials Reference",
Url = "/references/magic-materials",
Description = "View the magic material dataset and bonuses in a reference table."
},
new SectionLink
{
Title = "Province Improvements Reference",
Url = "/references/province-improvements",
Description = "View the province improvements dataset including costs, effects, and requirements."
}
}
},
+18 -3
View File
@@ -72,9 +72,23 @@
"icon": "lucide-file",
"title": "Province Improvement Data"
}
},
{
"id": "1c5c0981268a9a26",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Document Raw Data and Turn it into Class Data.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Document Raw Data and Turn it into Class Data"
}
}
],
"currentTab": 3
"currentTab": 4
},
{
"id": "0d0bf6ef8ed6d192",
@@ -285,12 +299,13 @@
"bases:Create new base": false
}
},
"active": "fd3766d6a78ed7a8",
"active": "1c5c0981268a9a26",
"lastOpenFiles": [
"Province Improvement Data.md",
"Document Raw Data and Turn it into Class Data.md",
"Collect Data.md",
"_Tasks Kanban.base",
"_Plan.canvas",
"Province Improvement Data.md",
"Overview.md",
"Play Architect culture and find out what Monuments are.md",
"Magic Material Data.md",
@@ -0,0 +1,8 @@
---
type: Prompt
---
Take Province Improvement Data.md and update the data information based on the current and newly added raw data sections.
After this is updated, then add new C# classes and data to the AOW4/Data folder.
Then when this is done, add a Blazor page with a table in the Reference section to show off said data.
+13 -9
View File
@@ -7,18 +7,22 @@ Each Province Improvement decreases stability by -5.
---
See Raw Data section
# Schema
# String
- Name required: Taken from the Land improvement column. We are just going to ignore the Water improvement and Lava improvements names, because that is flavour that doesn't effect us
## String
- **Name** (required): The name of the province improvement. Taken from the Land/Water/Lava improvement column; we use only the single name (ignoring Water/Lava flavour variants).
- **Category**: The base type/category of the improvement (Conduit, Farm, Forester, Mine, Quarry, Research Post, Teleporter, Monument, etc.).
- **Effects**: A text description of the main effects. This can include resource bonuses (+X Mana, +X Gold, etc.), adjacent bonuses, terrain effects, and other special mechanics.
- **Requirements**: A text description of any build requirements (terrain, resource nodes, Town Hall tier, etc.).
- **Source**: The source/culture/tome that grants this improvement (General, Barbarian, Feudal, High, etc.).
# Int
## Int
- **CostProduction**: Production cost to build (from Cost column).
- **CostGold**: Gold cost to build (from Cost column).
- increaseMana?: from effects column if containing relevant information
- increaseFood?: from effects column if containing relevant information
- inceaseProduction?: from effects column if containing relevant information
- increaseGold?: from effects column if containing relevant information
- increaseKnowledge?: from effects column if containing relevant information
## Notes
- Base stability penalty: all improvements have -5 Stability
- See Raw Data sections below for all the improvements by category
---