Add Magic Material data structure and related documentation; create infrastructure files for client, desktop, mobile, and server apps

This commit is contained in:
2026-05-25 16:43:40 -04:00
parent d6048b4d55
commit 8ba4d4ee9b
8 changed files with 236 additions and 19 deletions
+41
View File
@@ -0,0 +1,41 @@
namespace AOW4.Data;
public enum MagicMaterialCategory
{
Ore,
SunlessOre,
Liquid,
Plant,
VoidStone
}
public class MagicMaterial
{
public MagicMaterialCategory Category { get; set; }
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public string? GlobalBonus { get; set; }
public string? InfusionEffects1 { get; set; }
public string? InfusionEffects2 { get; set; }
public string? InfusionEffects3 { get; set; }
public int? IncreaseProduction { get; set; }
public int? IncreaseGold{ get; set; }
public int? IncreaseMana { get; set; }
public int? IncreaseDraft { get; set; }
public int? IncreaseKnowledge { get; set; }
public int? IncreaseFood { get; set; }
public int? IncreaseStability { get; set; }
public int? IncreaseImperium { get; set; }
public int? IncreaseAllegianceFromWhisperingStones { get; set; }
public int? IncreaseRelationWithFreeCitiesAndRulers { get; set; }
public int? IncreaseCombatCastingPoints { get; set; }
public int? IncreaseWorldCastingPoints { get; set; }
public int? IncreaseHPRegen { get; set; }
public int? IncreaseHitPoints { get; set; }
public int? IncreaseExperiencePercent { get; set; }
public int? IncreaseAllegianceFromUmbralDwellings { get; set; }
public int? DecreaseDraftCostPercent { get; set; }
public int? DecreaseRecruitmentCostPercent { get; set; }
public int? DecreaseKnowledgeResearchCostPercent { get; set; }
public int? DecreaseTurnsTakenToFoundAbsorbMigrateCities { get; set; }
}
+142
View File
@@ -0,0 +1,142 @@
using System.Collections.Generic;
namespace AOW4.Data;
public static class MagicMaterialsData
{
public static readonly IReadOnlyList<MagicMaterial> RawData = new List<MagicMaterial>
{
new MagicMaterial
{
Category = MagicMaterialCategory.Ore,
Name = "Arcanum Ore",
Description = "Desolate, Cave Underground and Desolate Underground only. Collection effect: Rings of Binding.",
IncreaseProduction = 10,
IncreaseMana = 10,
GlobalBonus = "-25% Hurry Recruitment Cost",
InfusionEffects1 = "Inflict Sundered Defense\nPower Cleave\nSupport - Bolstered Defense\nReinforced\n+2 Defense\nBolstering Defense\nJuggernaut\nDemolisher",
InfusionEffects2 = "Construct Slayer\nDragon Slayer\nInflict Immobilized\nPush Back\nDisplace and Replace\n+3 Defense\nSiege Master"
},
new MagicMaterial
{
Category = MagicMaterialCategory.Ore,
Name = "Focus Crystals",
Description = "Desolate, Cave Underground and Desolate Underground only. Collection effect: Rings of Binding.",
IncreaseGold = 10,
IncreaseKnowledge = 10,
GlobalBonus = "+10% Unit Experience Gain",
InfusionEffects1 = "Retaliator +50%\n+1 Range\nInflict Marked\nDamage Reflection 30%\n+20% Accuracy\nLightning Strike",
InfusionEffects2 = "Retaliator +100%\nElemental Slayer\nInflict Stunned\nHyper-Awareness\n+30% Accuracy\nInversion",
InfusionEffects3 = "Area Damage - Line\nDamage Reflection 40%"
},
new MagicMaterial
{
Category = MagicMaterialCategory.Ore,
Name = "Fireforge Stone",
Description = "Desolate, Cave Underground and Desolate Underground only. Collection effect: Rings of Binding.",
IncreaseProduction = 20,
DecreaseDraftCostPercent = 20,
GlobalBonus = "-20% Unit Draft Cost",
InfusionEffects1 = "Fire Damage\n+20% Critical Damage\nInflict Burning\nSupport - Strengthened\nLesser Fire Shield\n+2 Fire Resistance\nBerserker's Rage",
InfusionEffects2 = "Arcfire Damage\n+40% Critical Damage\nPlant Slayer\nGreater Fire Shield\n+4 Fire Resistance\nIgnore 4 Status Resistance",
InfusionEffects3 = "Area Damage - Blast\nInflict Insanity\nConsume Chaos\n+6 Fire Resistance"
},
new MagicMaterial
{
Category = MagicMaterialCategory.SunlessOre,
Name = "Blood Glass",
Description = "Sunless Terrain only. Counts as Ore.",
IncreaseDraft = 20,
IncreaseHPRegen = 5,
GlobalBonus = "+5 HP regeneration (on the world map)",
InfusionEffects1 = "Greater Inflict Bleed\nLifedrinker\nBlood Sigil"
},
new MagicMaterial
{
Category = MagicMaterialCategory.Liquid,
Name = "Archon Blood",
Description = "Arctic, Highlands and Arctic Underground only. Collection effect: Cosmoflux Elixir.",
IncreaseMana = 20,
IncreaseCombatCastingPoints = 15,
GlobalBonus = "+15 Combat Casting Points",
InfusionEffects1 = "Frost Damage\nInfecting\nAssassinate\nLife Steal\nLesser Frost Shield\n+10 Hit Points\n+2 Frost Resistance\nVicious Killer\nFlanker\nRaise Undead",
InfusionEffects2 = "Death Damage\nInflict Diseased\n+15 Hit Points\n+4 Frost Resistance\nBolstering Regeneration\nUndying",
InfusionEffects3 = "Inflict Decaying\nGravecall\nGreater Frost Shield\n+6 Frost Resistance"
},
new MagicMaterial
{
Category = MagicMaterialCategory.Liquid,
Name = "Astral Dew",
Description = "Arctic, Highlands and Arctic Underground only. Collection effect: Cosmoflux Elixir.",
IncreaseMana = 10,
IncreaseKnowledge = 10,
IncreaseWorldCastingPoints = 15,
GlobalBonus = "+15 World Map Casting Points",
InfusionEffects1 = "Lightning Damage\nInflict Status Vulnerability\nInflict Sundered Resistance\nSupport - Bolstered Resistance\nLesser Lightning Shield\nWarded\n+2 Lightning Resistance\nSlip Away\nCasting Points +20",
InfusionEffects2 = "Magic Origin Slayer\nInflict Frozen\nGreater Lightning Shield\n+4 Lightning Resistance",
InfusionEffects3 = "Static Shield\n+6 Lightning Resistance\nPass Through\nAstral Membrane"
},
new MagicMaterial
{
Category = MagicMaterialCategory.Liquid,
Name = "Tranquility Pool",
Description = "Arctic, Highlands and Arctic Underground only. Collection effect: Cosmoflux Elixir.",
IncreaseKnowledge = 20,
DecreaseKnowledgeResearchCostPercent = 10,
GlobalBonus = "-10% Knowledge research cost for spells",
InfusionEffects1 = "Inflict Slowed\nInflict Weakened\nInflict Wet\nSupport - Status Protection\nLesser Spirit Shield\n+2 Resistance\n+2 Status Resistance\nAttunement: Star Blades\nBolstering Resistance\nSlippery\nHindering Blizzard",
InfusionEffects2 = "Celestial Slayer\nUndead Slayer\n+3 Resistance\n+3 Status Resistance\nAttunement: Fortune",
InfusionEffects3 = "Area Damage - Cascade\nStatus Effect Immunity\nResurrection"
},
new MagicMaterial
{
Category = MagicMaterialCategory.Plant,
Name = "Haste Berries",
Description = "Desert, Temperate and Tropical only. Collection effect: Imperial Essence.",
IncreaseDraft = 20,
DecreaseTurnsTakenToFoundAbsorbMigrateCities = 2,
GlobalBonus = "-2 turns to found, absorb or migrate cities",
InfusionEffects1 = "Frenzy\nInflict Distracted\nSwift\nWind Barrier\nConjure Animal",
InfusionEffects2 = "Extra Retaliation\nGiant Slayer\nInflict Blinded\nWhirlwind\nDefensive Masters\nVery Fast Movement\nKilling Momentum\nAnimate Flora",
InfusionEffects3 = "Area Damage - Chain\nPolymorph"
},
new MagicMaterial
{
Category = MagicMaterialCategory.Plant,
Name = "Silvertongue Fruit",
Description = "Desert, Temperate and Tropical only. Collection effect: Imperial Essence.",
IncreaseFood = 10,
IncreaseDraft = 10,
IncreaseAllegianceFromWhisperingStones = 1,
GlobalBonus = "+1 Allegiance from Whispering Stones",
InfusionEffects1 = "Blight Damage\nInflict Condemned\nInflict Poisoned\nSupport - Regeneration\nLesser Blight Shield\n+2 Blight Resistance\nInspiring Killer\nUniversal Camouflage\nArmy Trainer\nSummon Spider",
InfusionEffects2 = "Hero Slayer\nInflict Despairing\nInflict Taunted\nGreater Blight Shield\n+4 Blight Resistance\nArmy Maintenance",
InfusionEffects3 = "+6 Blight Resistance\nDomination\nSummon Spider Monarch"
},
new MagicMaterial
{
Category = MagicMaterialCategory.Plant,
Name = "Rainbow Clover",
Description = "Desert, Temperate and Tropical only. Collection effect: Imperial Essence.",
IncreaseFood = 10,
IncreaseStability = 10,
IncreaseRelationWithFreeCitiesAndRulers = 100,
GlobalBonus = "+100 Relations with Free Cities and Rulers",
InfusionEffects1 = "Spirit Damage\n+2 Spirit Resistance\nZeal\nArmy Recuperation",
InfusionEffects2 = "Radiant Damage\n+20% Critical Hit chance\nFiend Slayer\n+4 Spirit Resistance",
InfusionEffects3 = "+30% Critical Hit chance\n+6 Spirit Resistance\nMass Heal"
},
new MagicMaterial
{
Category = MagicMaterialCategory.VoidStone,
Name = "Void Stones",
Description = "Umbral Abyss only. Collection effect: Void Ink.",
IncreaseMana = 30,
IncreaseAllegianceFromUmbralDwellings = 2,
GlobalBonus = "+2 Allegiance per turn with discovered Umbral Dwellings",
InfusionEffects1 = "Boon Stealing\nCleansing Fire\nArmy: Umbral Malady Immunity",
InfusionEffects2 = "Splitterling Infection\nSummon Umbral Demon",
InfusionEffects3 = "True Damage"
}
};
}
+21 -18
View File
@@ -10,7 +10,7 @@
{
"id": "330f0f204ec3f22e",
"type": "tabs",
"dimension": 57.17054263565892,
"dimension": 79.55426356589147,
"children": [
{
"id": "7a5b3ed118d43e9a",
@@ -32,14 +32,17 @@
"id": "a152291798e86a03",
"type": "leaf",
"state": {
"type": "markdown",
"type": "canvas",
"state": {
"file": "Magic Material Data.md",
"mode": "source",
"source": false
"file": "_Plan.canvas",
"viewState": {
"x": -2348.621950408076,
"y": 7.869358821353444,
"zoom": -1.2248009278071696
}
},
"icon": "lucide-file",
"title": "Magic Material Data"
"icon": "lucide-layout-dashboard",
"title": "_Plan"
}
},
{
@@ -71,12 +74,12 @@
}
}
],
"currentTab": 1
"currentTab": 2
},
{
"id": "0d0bf6ef8ed6d192",
"type": "tabs",
"dimension": 42.82945736434108,
"dimension": 20.44573643410853,
"children": [
{
"id": "f194521fa12ddca8",
@@ -282,16 +285,21 @@
"bases:Create new base": false
}
},
"active": "a152291798e86a03",
"active": "303f63f445fc3254",
"lastOpenFiles": [
"Basic Province Improvement Data.md",
"_Plan.canvas",
"Mobile App.md",
"Desktop App.md",
"Server App.md",
"Client App.md",
"agent.md.md",
"Magic Material Data.md",
"Basic Province Improvement Data.md",
"Collect Data.md",
"Resource Node Data.md",
"Load Game Data Into Build Calculator.md",
"_Tasks Kanban.base",
"Province.md",
"_Plan.canvas",
"Overview.md",
"Forge.md",
"Find the Gold Cost Rush Formula.md",
@@ -305,11 +313,6 @@
"Home Page.md",
"Plan Basic Pages.md",
"Reference Pages.md",
"Resources.md",
"Rush Gold Cost.md",
"Setup Test Database.md",
"Spell Data Tables.md",
"Tome Calculator.md",
"Victory Condition Information.md"
"Resources.md"
]
}
+8
View File
@@ -0,0 +1,8 @@
---
type: Infrastructure
---
Free hosting of a static web page.
Easy distribution via a url
+6
View File
@@ -0,0 +1,6 @@
---
type: Infrastructure
---
Desktop version for easy PC viewing, and local file saving
+6
View File
@@ -0,0 +1,6 @@
---
type: Infrastructure
---
Mobile version for easy android viewing, and local file saving
+7
View File
@@ -0,0 +1,7 @@
---
type: Infrastructure
---
If for some reason I even want to support cloud storage
+5 -1
View File
@@ -12,7 +12,11 @@
{"id":"13e1923067cfcf9b","type":"file","file":"Reference Pages.md","x":-780,"y":-660,"width":400,"height":400},
{"id":"bbbf447fc1602d59","type":"file","file":"Learning Pages.md","x":240,"y":-700,"width":400,"height":400},
{"id":"6d7d63854782ff9e","type":"file","file":"Victory Condition Information.md","x":240,"y":-200,"width":400,"height":400},
{"id":"bf2a479683623e4e","type":"file","file":"Building Calculator.md","x":-2720,"y":-200,"width":400,"height":400,"color":"4"}
{"id":"bf2a479683623e4e","type":"file","file":"Building Calculator.md","x":-2720,"y":-200,"width":400,"height":400,"color":"4"},
{"id":"2a3c90c3a40f782f","x":-3560,"y":-700,"width":400,"height":400,"color":"4","type":"file","file":"Client App.md"},
{"id":"8aa95aadae7e59c7","x":-4000,"y":-700,"width":400,"height":400,"type":"file","file":"Server App.md"},
{"id":"630df17b0233eeb4","x":-4000,"y":-260,"width":400,"height":400,"color":"4","type":"file","file":"Desktop App.md"},
{"id":"b4a971cd46f77eda","x":-3560,"y":-260,"width":400,"height":400,"type":"file","file":"Mobile App.md"}
],
"edges":[
{"id":"f54d8c93d7012115","fromNode":"a10ea2bfe08eaab6","fromSide":"bottom","toNode":"be06aa9b621f72a5","toSide":"top"},