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", "id": "330f0f204ec3f22e",
"type": "tabs", "type": "tabs",
"dimension": 57.17054263565892, "dimension": 79.55426356589147,
"children": [ "children": [
{ {
"id": "7a5b3ed118d43e9a", "id": "7a5b3ed118d43e9a",
@@ -32,14 +32,17 @@
"id": "a152291798e86a03", "id": "a152291798e86a03",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "canvas",
"state": { "state": {
"file": "Magic Material Data.md", "file": "_Plan.canvas",
"mode": "source", "viewState": {
"source": false "x": -2348.621950408076,
"y": 7.869358821353444,
"zoom": -1.2248009278071696
}
}, },
"icon": "lucide-file", "icon": "lucide-layout-dashboard",
"title": "Magic Material Data" "title": "_Plan"
} }
}, },
{ {
@@ -71,12 +74,12 @@
} }
} }
], ],
"currentTab": 1 "currentTab": 2
}, },
{ {
"id": "0d0bf6ef8ed6d192", "id": "0d0bf6ef8ed6d192",
"type": "tabs", "type": "tabs",
"dimension": 42.82945736434108, "dimension": 20.44573643410853,
"children": [ "children": [
{ {
"id": "f194521fa12ddca8", "id": "f194521fa12ddca8",
@@ -282,16 +285,21 @@
"bases:Create new base": false "bases:Create new base": false
} }
}, },
"active": "a152291798e86a03", "active": "303f63f445fc3254",
"lastOpenFiles": [ "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", "Magic Material Data.md",
"Basic Province Improvement Data.md",
"Collect Data.md", "Collect Data.md",
"Resource Node Data.md", "Resource Node Data.md",
"Load Game Data Into Build Calculator.md", "Load Game Data Into Build Calculator.md",
"_Tasks Kanban.base", "_Tasks Kanban.base",
"Province.md", "Province.md",
"_Plan.canvas",
"Overview.md", "Overview.md",
"Forge.md", "Forge.md",
"Find the Gold Cost Rush Formula.md", "Find the Gold Cost Rush Formula.md",
@@ -305,11 +313,6 @@
"Home Page.md", "Home Page.md",
"Plan Basic Pages.md", "Plan Basic Pages.md",
"Reference Pages.md", "Reference Pages.md",
"Resources.md", "Resources.md"
"Rush Gold Cost.md",
"Setup Test Database.md",
"Spell Data Tables.md",
"Tome Calculator.md",
"Victory Condition Information.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":"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":"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":"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":[ "edges":[
{"id":"f54d8c93d7012115","fromNode":"a10ea2bfe08eaab6","fromSide":"bottom","toNode":"be06aa9b621f72a5","toSide":"top"}, {"id":"f54d8c93d7012115","fromNode":"a10ea2bfe08eaab6","fromSide":"bottom","toNode":"be06aa9b621f72a5","toSide":"top"},