Implement technology tree, research queue by least remaining work, and unit/building tech availability & obsolescence

This commit is contained in:
2026-11-09 20:28:53 +01:00
parent d4bd9f4711
commit d266715418
30 changed files with 1809 additions and 45 deletions
+2
View File
@@ -4,6 +4,7 @@ action_needed:
track_idle_units: true
track_city_no_production: true
track_city_free_population: true
track_no_research: true
max_visible_items: 8
# Visual & Layout parameters
@@ -19,5 +20,6 @@ action_needed:
unit_idle_color: "#3CA0FF"
city_no_prod_color: "#FFA028"
city_free_pop_color: "#46DC82"
no_research_color: "#38C8FF"
card_bg_color: "#121822"
card_bg_alpha: 235
+131 -8
View File
@@ -1,19 +1,55 @@
# City Buildings & Extensions configuration
# All gameplay values are configurable via YAML
# All gameplay values, required technologies, and obsolescence technologies are configurable via YAML
districts:
center:
id: "center"
name: "City Center"
max_buildings: 10
max_buildings: 12
description: "The urban core and administrative center of the city."
buildings:
monument:
id: "monument"
name: "Monument"
district: "center"
labor_cost: 800
required_tech: ""
obsolete_tech: ""
food_modifier: 0.0
food_bonus: 0
labor_bonus: 0
culture_bonus: 250
science_bonus: 0
faith_bonus: 0
gold_bonus: 0
icon: "images/improvements/monument.png"
description: "+250 Culture per tick"
palisade:
id: "palisade"
name: "Wooden Palisade"
district: "center"
labor_cost: 700
required_tech: ""
obsolete_tech: "masonry"
food_modifier: 0.0
food_bonus: 0
labor_bonus: 100
culture_bonus: 100
science_bonus: 0
faith_bonus: 0
gold_bonus: 0
icon: "images/improvements/monument.png"
description: "+100 Production, +100 Culture/tick (Obsolete with Masonry)"
granary:
id: "granary"
name: "Granary"
district: "center"
labor_cost: 1000
required_tech: "pottery"
obsolete_tech: ""
food_modifier: 0.50
food_bonus: 0
labor_bonus: 0
@@ -24,17 +60,104 @@ buildings:
icon: "images/improvements/granary.png"
description: "+50% Food production in city"
monument:
id: "monument"
name: "Monument"
library:
id: "library"
name: "Library"
district: "center"
labor_cost: 800
labor_cost: 1200
required_tech: "writing"
obsolete_tech: ""
food_modifier: 0.0
food_bonus: 0
labor_bonus: 0
culture_bonus: 250
culture_bonus: 0
science_bonus: 350
faith_bonus: 0
gold_bonus: 0
icon: "images/resources/kennis.png"
description: "+350 Science per tick"
walls:
id: "walls"
name: "Stone Walls"
district: "center"
labor_cost: 1500
required_tech: "masonry"
obsolete_tech: "gunpowder"
food_modifier: 0.0
food_bonus: 0
labor_bonus: 200
culture_bonus: 200
science_bonus: 0
faith_bonus: 0
gold_bonus: 0
icon: "images/improvements/monument.png"
description: "+250 Culture per tick"
description: "+200 Production, +200 Culture/tick (Obsolete with Gunpowder)"
water_mill:
id: "water_mill"
name: "Water Mill"
district: "center"
labor_cost: 1600
required_tech: "wheel"
obsolete_tech: ""
food_modifier: 0.0
food_bonus: 200
labor_bonus: 250
culture_bonus: 0
science_bonus: 0
faith_bonus: 0
gold_bonus: 0
icon: "images/improvements/granary.png"
description: "+200 Food, +250 Production per tick"
market:
id: "market"
name: "Market"
district: "center"
labor_cost: 1800
required_tech: "currency"
obsolete_tech: ""
food_modifier: 0.0
food_bonus: 0
labor_bonus: 0
culture_bonus: 0
science_bonus: 0
faith_bonus: 0
gold_bonus: 400
icon: "images/resources/goud.png"
description: "+400 Gold per tick"
university:
id: "university"
name: "University"
district: "center"
labor_cost: 2800
required_tech: "education"
obsolete_tech: ""
food_modifier: 0.0
food_bonus: 0
labor_bonus: 0
culture_bonus: 100
science_bonus: 700
faith_bonus: 0
gold_bonus: 0
icon: "images/resources/kennis.png"
description: "+700 Science, +100 Culture per tick"
workshop:
id: "workshop"
name: "Workshop"
district: "center"
labor_cost: 2600
required_tech: "machinery"
obsolete_tech: ""
food_modifier: 0.0
food_bonus: 0
labor_bonus: 500
culture_bonus: 0
science_bonus: 0
faith_bonus: 0
gold_bonus: 0
icon: "images/resources/arbeid.png"
description: "+500 Production per tick"
+39 -1
View File
@@ -128,7 +128,7 @@ ui:
management_title: "%1 - CITY MANAGEMENT"
close_btn: "[X] Close"
local_info: "Local: Population: %L1 (%2 Pop: %3 working, %4 free) | Labor: %L5"
national_info: "National: Culture: %L1 | Science: %L2 | Gold: %L3 | Faith: %L4"
national_info: "National: Culture: %L1 | Science: +%L2/tick | Gold: %L3 | Faith: %L4"
help_text: "Click a slot to assign/free Pop | Hold a slot to choose resource | Buy tile with Culture."
current_production: "CURRENT PRODUCTION"
production_panel_title: "CITY PRODUCTION"
@@ -160,6 +160,8 @@ ui:
queued_item_removed: "%1: Removed %2 from queue"
already_built: "%1 already built in this city!"
already_queued: "%1 is already in the production queue!"
requires_tech: "%1 requires technology: %2!"
obsolete_item: "%1 is obsolete and can no longer be built!"
growth_float: "+%1 Inhabitants | +%2 Culture"
not_enough_culture: "Not enough Culture! (%1 needed)"
worker_freed: "Pop worker freed"
@@ -187,6 +189,42 @@ ui:
unit_idle_desc: "Needs orders"
city_no_production_desc: "No production"
city_free_pop_desc: "+%1 Free Pop"
no_research_title: "RESEARCH"
no_research_desc: "Choose technology"
dismiss_tip: "Right-click to dismiss"
more_items: "+%1"
tech_tree:
title: "TECHNOLOGY TREE"
close_btn: "[X] Close"
btn_open: "Tech [T]"
no_research: "No Research"
choose_research: "Choose Tech [T]"
science_rate: "+%L1/tick"
active_research: "ACTIVE RESEARCH: %1"
no_active_research: "No active research - Click any technology node below to start researching"
queue_label: "QUEUE (%1):"
clear_queue_btn: "Clear Queue"
status_researched: "RESEARCHED"
status_researching: "ACTIVE #1"
status_queued: "QUEUED #%1"
status_available: "AVAILABLE"
status_locked: "LOCKED"
cost_format: "%L1 Science (~%2 %3)"
progress_format: "%L1 / %L2 (%3%)"
remaining_format: "%L1 left (~%2 %3)"
tick_singular: "tick"
tick_plural: "ticks"
prereqs_label: "Req: %1"
prereqs_none: "Base Technology"
unlocks_label: "Unlocks: %1"
obsoletes_label: "Obsoletes: %1"
help_text: "Left-click a tech to research (prerequisites auto-queued by least remaining work) | Shift+Click to append | Right-click to remove | Drag/Scroll to pan"
tech_completed_float: "Technology Researched: %1!"
tech_started_float: "Researching: %1"
tech_queued_float: "Research Queue Updated (%1 techs, target: %2)"
tech_already_researched: "%1 has already been researched!"
tech_cancelled_float: "Research queue cleared"
tech_removed_float: "Removed %1 from research queue"
+202
View File
@@ -0,0 +1,202 @@
# Technology Tree Configuration
# All gameplay values, science costs, layout coordinates, and prerequisite chains are configurable via YAML.
technologies:
pottery:
id: "pottery"
name: "Pottery"
science_cost: 1000
column: 0
row: 0
icon: "images/improvements/granary.png"
description: "Ceramic vessels for storing grain and preserving food supplies."
animal_husbandry:
id: "animal_husbandry"
name: "Animal Husbandry"
science_cost: 1000
column: 0
row: 1
icon: "images/resources/voedsel.png"
description: "Domestication and breeding of livestock for food and labor."
mining:
id: "mining"
name: "Mining"
science_cost: 1200
column: 0
row: 2
icon: "images/resources/arbeid.png"
description: "Extraction of stone and metal ores from the earth."
sailing:
id: "sailing"
name: "Sailing"
science_cost: 1500
column: 1
row: 0
icon: "images/units/galley.png"
description: "Harnessing the wind to navigate coastal waters."
prerequisites:
- "pottery"
writing:
id: "writing"
name: "Writing"
science_cost: 1800
column: 1
row: 1
icon: "images/resources/kennis.png"
description: "Recording laws, history, and scientific knowledge in script."
prerequisites:
- "pottery"
archery:
id: "archery"
name: "Archery"
science_cost: 1500
column: 1
row: 2
icon: "images/units/slinger.png"
description: "Use of bows and arrows for superior ranged warfare."
prerequisites:
- "animal_husbandry"
bronze_working:
id: "bronze_working"
name: "Bronze Working"
science_cost: 1800
column: 1
row: 3
icon: "images/units/warrior.png"
description: "Smelting copper and tin into durable bronze weapons and armor."
prerequisites:
- "mining"
masonry:
id: "masonry"
name: "Masonry"
science_cost: 1600
column: 1
row: 4
icon: "images/improvements/monument.png"
description: "Cutting and laying stone for permanent fortifications and monuments."
prerequisites:
- "mining"
celestial_navigation:
id: "celestial_navigation"
name: "Celestial Navigation"
science_cost: 2500
column: 2
row: 0
icon: "images/units/galley.png"
description: "Using the stars to guide maritime trade and exploration."
prerequisites:
- "sailing"
- "writing"
currency:
id: "currency"
name: "Currency"
science_cost: 2400
column: 2
row: 1
icon: "images/resources/goud.png"
description: "Standardized coinage enabling thriving markets and trade."
prerequisites:
- "writing"
wheel:
id: "wheel"
name: "The Wheel"
science_cost: 2200
column: 2
row: 2
icon: "images/actions/road.png"
description: "Rotational mechanics for transport and water-powered mills."
prerequisites:
- "archery"
- "mining"
horseback_riding:
id: "horseback_riding"
name: "Horseback Riding"
science_cost: 2500
column: 2
row: 3
icon: "images/actions/move.png"
description: "Mounted cavalry tactics for rapid battlefield maneuvers."
prerequisites:
- "archery"
iron_working:
id: "iron_working"
name: "Iron Working"
science_cost: 2800
column: 2
row: 4
icon: "images/actions/attack.png"
description: "Forging strong iron blades and heavy infantry armor."
prerequisites:
- "bronze_working"
education:
id: "education"
name: "Education"
science_cost: 3600
column: 3
row: 0
icon: "images/resources/kennis.png"
description: "Higher learning institutions and systematic scientific inquiry."
prerequisites:
- "currency"
- "celestial_navigation"
engineering:
id: "engineering"
name: "Engineering"
science_cost: 3400
column: 3
row: 2
icon: "images/resources/arbeid.png"
description: "Advanced structural design, aqueducts, and mechanical contraptions."
prerequisites:
- "wheel"
- "masonry"
stirrups:
id: "stirrups"
name: "Stirrups"
science_cost: 4000
column: 3
row: 3
icon: "images/actions/move.png"
description: "Saddle stirrups enabling heavily armored shock cavalry."
prerequisites:
- "horseback_riding"
- "iron_working"
machinery:
id: "machinery"
name: "Machinery"
science_cost: 4200
column: 4
row: 1
icon: "images/resources/arbeid.png"
description: "Mechanical gears, crossbows, and specialized workshops."
prerequisites:
- "engineering"
- "iron_working"
gunpowder:
id: "gunpowder"
name: "Gunpowder"
science_cost: 5200
column: 4
row: 3
icon: "images/actions/attack.png"
description: "Explosive black powder revolutionizing firearms and siege warfare."
prerequisites:
- "machinery"
- "stirrups"
+16
View File
@@ -0,0 +1,16 @@
id: archer
name: Archer
category: militair
domain: land
health: 85
movement_speed: 2.0
cost: 60
labor_cost: 1200
attack_damage: 25
attack_range: 2
required_tech: "archery"
obsolete_tech: "machinery"
icon: images/units/slinger.png
actions:
- verplaatsen
- aanvallen
+5 -3
View File
@@ -6,7 +6,9 @@ health: 100
movement_speed: 2.0
cost: 50
labor_cost: 1000
build_charges: -1 # -1 voor oneindig doorwerken
required_tech: ""
obsolete_tech: ""
build_charges: -1 # -1 for infinite build charges
infinite_charges: true
icon: images/units/builder.png
actions:
@@ -14,5 +16,5 @@ actions:
- boerderij_bouwen
- build_road
action_speeds:
boerderij_bouwen: 10.0 # Duur in seconden die deze builder unit nodig heeft voor de actie boerderij_bouwen
build_road: 2 # Duur in ticks
boerderij_bouwen: 10.0
build_road: 2
+16
View File
@@ -0,0 +1,16 @@
id: crossbowman
name: Crossbowman
category: militair
domain: land
health: 110
movement_speed: 2.0
cost: 120
labor_cost: 2400
attack_damage: 42
attack_range: 2
required_tech: "machinery"
obsolete_tech: ""
icon: images/units/slinger.png
actions:
- verplaatsen
- aanvallen
+2
View File
@@ -8,6 +8,8 @@ cost: 60
labor_cost: 1500
attack_damage: 25
attack_range: 1
required_tech: "sailing"
obsolete_tech: ""
icon: images/units/galley.png
actions:
- verplaatsen
+16
View File
@@ -0,0 +1,16 @@
id: horseman
name: Horseman
category: militair
domain: land
health: 125
movement_speed: 4.0
cost: 85
labor_cost: 1700
attack_damage: 34
attack_range: 1
required_tech: "horseback_riding"
obsolete_tech: "stirrups"
icon: images/units/warrior.png
actions:
- verplaatsen
- aanvallen
+16
View File
@@ -0,0 +1,16 @@
id: knight
name: Knight
category: militair
domain: land
health: 180
movement_speed: 4.0
cost: 140
labor_cost: 2800
attack_damage: 52
attack_range: 1
required_tech: "stirrups"
obsolete_tech: ""
icon: images/units/warrior.png
actions:
- verplaatsen
- aanvallen
+16
View File
@@ -0,0 +1,16 @@
id: musketman
name: Musketman
category: militair
domain: land
health: 200
movement_speed: 2.0
cost: 160
labor_cost: 3200
attack_damage: 60
attack_range: 1
required_tech: "gunpowder"
obsolete_tech: ""
icon: images/units/warrior.png
actions:
- verplaatsen
- aanvallen
+2
View File
@@ -6,6 +6,8 @@ health: 100
movement_speed: 2.0
cost: 80
labor_cost: 2000
required_tech: ""
obsolete_tech: ""
icon: images/units/settler.png
actions:
- verplaatsen
+2
View File
@@ -8,6 +8,8 @@ cost: 35
labor_cost: 800
attack_damage: 15
attack_range: 2
required_tech: ""
obsolete_tech: "archery"
icon: images/units/slinger.png
actions:
- verplaatsen
+16
View File
@@ -0,0 +1,16 @@
id: spearman
name: Spearman
category: militair
domain: land
health: 120
movement_speed: 2.0
cost: 65
labor_cost: 1300
attack_damage: 28
attack_range: 1
required_tech: "bronze_working"
obsolete_tech: "gunpowder"
icon: images/units/warrior.png
actions:
- verplaatsen
- aanvallen
+16
View File
@@ -0,0 +1,16 @@
id: swordsman
name: Swordsman
category: militair
domain: land
health: 140
movement_speed: 2.0
cost: 90
labor_cost: 1800
attack_damage: 38
attack_range: 1
required_tech: "iron_working"
obsolete_tech: "gunpowder"
icon: images/units/warrior.png
actions:
- verplaatsen
- aanvallen
+2
View File
@@ -8,6 +8,8 @@ cost: 40
labor_cost: 1000
attack_damage: 20
attack_range: 1
required_tech: ""
obsolete_tech: "iron_working"
icon: images/units/warrior.png
actions:
- verplaatsen