Skip to content

Commit 2505dbd

Browse files
committed
convert: Refactor SWGBCCTechSubprocessor into separate files.
1 parent 1b170f5 commit 2505dbd

File tree

7 files changed

+257
-206
lines changed

7 files changed

+257
-206
lines changed

openage/convert/processor/conversion/swgbcc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ add_subdirectory(civ)
1818
add_subdirectory(main)
1919
add_subdirectory(nyan)
2020
add_subdirectory(pregen)
21+
add_subdirectory(tech)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
add_py_modules(
2+
__init__.py
3+
attribute_modify.py
4+
resource_modify.py
5+
upgrade_funcs.py
6+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Copyright 2025-2025 the openage authors. See copying.md for legal info.
2+
3+
"""
4+
Create nyan patches for techs in SWGB.
5+
"""
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Copyright 2025-2025 the openage authors. See copying.md for legal info.
2+
3+
"""
4+
Creates patches for modifying attributes of entities.
5+
"""
6+
from __future__ import annotations
7+
import typing
8+
9+
from ......nyan.nyan_structs import MemberOperator
10+
from .upgrade_funcs import UPGRADE_ATTRIBUTE_FUNCS
11+
12+
if typing.TYPE_CHECKING:
13+
from .....entity_object.conversion.converter_object import ConverterObjectGroup
14+
from .....entity_object.conversion.aoc.genie_effect import GenieEffectObject
15+
from .....value_object.conversion.forward_ref import ForwardRef
16+
17+
18+
def attribute_modify_effect(
19+
converter_group: ConverterObjectGroup,
20+
effect: GenieEffectObject,
21+
team: bool = False
22+
) -> list[ForwardRef]:
23+
"""
24+
Creates the patches for modifying attributes of entities.
25+
"""
26+
patches = []
27+
dataset = converter_group.data
28+
29+
effect_type = effect.get_type()
30+
operator = None
31+
if effect_type == 0:
32+
operator = MemberOperator.ASSIGN
33+
34+
elif effect_type == 4:
35+
operator = MemberOperator.ADD
36+
37+
elif effect_type == 5:
38+
operator = MemberOperator.MULTIPLY
39+
40+
else:
41+
raise TypeError(f"Effect type {effect_type} is not a valid resource effect")
42+
43+
unit_id = effect["attr_a"].value
44+
class_id = effect["attr_b"].value
45+
attribute_type = effect["attr_c"].value
46+
value = effect["attr_d"].value
47+
48+
if attribute_type == -1:
49+
return patches
50+
51+
affected_entities = []
52+
if unit_id != -1:
53+
entity_lines = {}
54+
entity_lines.update(dataset.unit_lines)
55+
entity_lines.update(dataset.building_lines)
56+
entity_lines.update(dataset.ambient_groups)
57+
58+
for line in entity_lines.values():
59+
if line.contains_entity(unit_id):
60+
affected_entities.append(line)
61+
62+
elif attribute_type == 19:
63+
if line.is_projectile_shooter() and line.has_projectile(unit_id):
64+
affected_entities.append(line)
65+
66+
elif class_id != -1:
67+
entity_lines = {}
68+
entity_lines.update(dataset.unit_lines)
69+
entity_lines.update(dataset.building_lines)
70+
entity_lines.update(dataset.ambient_groups)
71+
72+
for line in entity_lines.values():
73+
if line.get_class_id() == class_id:
74+
affected_entities.append(line)
75+
76+
else:
77+
return patches
78+
79+
upgrade_func = UPGRADE_ATTRIBUTE_FUNCS[attribute_type]
80+
for affected_entity in affected_entities:
81+
patches.extend(upgrade_func(converter_group, affected_entity, value, operator, team))
82+
83+
return patches
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Copyright 2025-2025 the openage authors. See copying.md for legal info.
2+
3+
"""
4+
Creates patches for modifying resources.
5+
"""
6+
from __future__ import annotations
7+
import typing
8+
9+
from ......nyan.nyan_structs import MemberOperator
10+
from .upgrade_funcs import UPGRADE_RESOURCE_FUNCS
11+
12+
if typing.TYPE_CHECKING:
13+
from .....entity_object.conversion.converter_object import ConverterObjectGroup
14+
from .....entity_object.conversion.aoc.genie_effect import GenieEffectObject
15+
from .....value_object.conversion.forward_ref import ForwardRef
16+
17+
18+
def resource_modify_effect(
19+
converter_group: ConverterObjectGroup,
20+
effect: GenieEffectObject,
21+
team: bool = False
22+
) -> list[ForwardRef]:
23+
"""
24+
Creates the patches for modifying resources.
25+
"""
26+
patches = []
27+
28+
effect_type = effect.get_type()
29+
operator = None
30+
if effect_type == 1:
31+
mode = effect["attr_b"].value
32+
33+
if mode == 0:
34+
operator = MemberOperator.ASSIGN
35+
36+
else:
37+
operator = MemberOperator.ADD
38+
39+
elif effect_type == 6:
40+
operator = MemberOperator.MULTIPLY
41+
42+
else:
43+
raise TypeError(f"Effect type {effect_type} is not a valid resource effect")
44+
45+
resource_id = effect["attr_a"].value
46+
value = effect["attr_d"].value
47+
48+
if resource_id in (-1, 6, 21):
49+
# -1 = invalid ID
50+
# 6 = set current age (unused)
51+
# 21 = tech count (unused)
52+
return patches
53+
54+
upgrade_func = UPGRADE_RESOURCE_FUNCS[resource_id]
55+
patches.extend(upgrade_func(converter_group, value, operator, team))
56+
57+
return patches
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Copyright 2025-2025 the openage authors. See copying.md for legal info.
2+
3+
"""
4+
Mappings of SWGB upgrade IDs to their respective subprocessor functions.
5+
"""
6+
from ...aoc.upgrade_attribute_subprocessor import AoCUpgradeAttributeSubprocessor
7+
from ...aoc.upgrade_resource_subprocessor import AoCUpgradeResourceSubprocessor
8+
from ..upgrade_attribute_subprocessor import SWGBCCUpgradeAttributeSubprocessor
9+
from ..upgrade_resource_subprocessor import SWGBCCUpgradeResourceSubprocessor
10+
11+
12+
UPGRADE_ATTRIBUTE_FUNCS = {
13+
0: AoCUpgradeAttributeSubprocessor.hp_upgrade,
14+
1: AoCUpgradeAttributeSubprocessor.los_upgrade,
15+
2: AoCUpgradeAttributeSubprocessor.garrison_capacity_upgrade,
16+
3: AoCUpgradeAttributeSubprocessor.unit_size_x_upgrade,
17+
4: AoCUpgradeAttributeSubprocessor.unit_size_y_upgrade,
18+
5: AoCUpgradeAttributeSubprocessor.move_speed_upgrade,
19+
6: AoCUpgradeAttributeSubprocessor.rotation_speed_upgrade,
20+
8: AoCUpgradeAttributeSubprocessor.armor_upgrade,
21+
9: AoCUpgradeAttributeSubprocessor.attack_upgrade,
22+
10: AoCUpgradeAttributeSubprocessor.reload_time_upgrade,
23+
11: AoCUpgradeAttributeSubprocessor.accuracy_upgrade,
24+
12: AoCUpgradeAttributeSubprocessor.max_range_upgrade,
25+
13: AoCUpgradeAttributeSubprocessor.work_rate_upgrade,
26+
14: AoCUpgradeAttributeSubprocessor.carry_capacity_upgrade,
27+
16: AoCUpgradeAttributeSubprocessor.projectile_unit_upgrade,
28+
17: AoCUpgradeAttributeSubprocessor.graphics_angle_upgrade,
29+
18: AoCUpgradeAttributeSubprocessor.terrain_defense_upgrade,
30+
19: AoCUpgradeAttributeSubprocessor.ballistics_upgrade,
31+
20: AoCUpgradeAttributeSubprocessor.min_range_upgrade,
32+
21: AoCUpgradeAttributeSubprocessor.resource_storage_1_upgrade,
33+
22: AoCUpgradeAttributeSubprocessor.blast_radius_upgrade,
34+
23: AoCUpgradeAttributeSubprocessor.search_radius_upgrade,
35+
100: SWGBCCUpgradeAttributeSubprocessor.resource_cost_upgrade,
36+
101: AoCUpgradeAttributeSubprocessor.creation_time_upgrade,
37+
102: AoCUpgradeAttributeSubprocessor.min_projectiles_upgrade,
38+
103: AoCUpgradeAttributeSubprocessor.cost_food_upgrade,
39+
104: SWGBCCUpgradeAttributeSubprocessor.cost_carbon_upgrade,
40+
105: SWGBCCUpgradeAttributeSubprocessor.cost_nova_upgrade,
41+
106: SWGBCCUpgradeAttributeSubprocessor.cost_ore_upgrade,
42+
107: AoCUpgradeAttributeSubprocessor.max_projectiles_upgrade,
43+
108: AoCUpgradeAttributeSubprocessor.garrison_heal_upgrade,
44+
}
45+
46+
UPGRADE_RESOURCE_FUNCS = {
47+
4: AoCUpgradeResourceSubprocessor.starting_population_space_upgrade,
48+
5: SWGBCCUpgradeResourceSubprocessor.conversion_range_upgrade,
49+
10: SWGBCCUpgradeResourceSubprocessor.shield_recharge_rate_upgrade,
50+
23: SWGBCCUpgradeResourceSubprocessor.submarine_detect_upgrade,
51+
26: SWGBCCUpgradeResourceSubprocessor.shield_dropoff_time_upgrade,
52+
27: SWGBCCUpgradeResourceSubprocessor.monk_conversion_upgrade,
53+
28: SWGBCCUpgradeResourceSubprocessor.building_conversion_upgrade,
54+
31: SWGBCCUpgradeResourceSubprocessor.assault_mech_anti_air_upgrade,
55+
32: AoCUpgradeResourceSubprocessor.bonus_population_upgrade,
56+
33: SWGBCCUpgradeResourceSubprocessor.shield_power_core_upgrade,
57+
35: SWGBCCUpgradeResourceSubprocessor.faith_recharge_rate_upgrade,
58+
36: AoCUpgradeResourceSubprocessor.farm_food_upgrade,
59+
38: SWGBCCUpgradeResourceSubprocessor.shield_air_units_upgrade,
60+
46: AoCUpgradeResourceSubprocessor.tribute_inefficiency_upgrade,
61+
47: AoCUpgradeResourceSubprocessor.gather_gold_efficiency_upgrade,
62+
50: AoCUpgradeResourceSubprocessor.reveal_ally_upgrade,
63+
56: SWGBCCUpgradeResourceSubprocessor.cloak_upgrade,
64+
58: SWGBCCUpgradeResourceSubprocessor.detect_cloak_upgrade,
65+
77: AoCUpgradeResourceSubprocessor.conversion_resistance_upgrade,
66+
78: AoCUpgradeResourceSubprocessor.trade_penalty_upgrade,
67+
79: AoCUpgradeResourceSubprocessor.gather_stone_efficiency_upgrade,
68+
84: AoCUpgradeResourceSubprocessor.starting_villagers_upgrade,
69+
85: AoCUpgradeResourceSubprocessor.chinese_tech_discount_upgrade,
70+
87: SWGBCCUpgradeResourceSubprocessor.concentration_upgrade,
71+
89: AoCUpgradeResourceSubprocessor.heal_rate_upgrade,
72+
90: SWGBCCUpgradeResourceSubprocessor.heal_range_upgrade,
73+
91: AoCUpgradeResourceSubprocessor.starting_food_upgrade,
74+
92: AoCUpgradeResourceSubprocessor.starting_wood_upgrade,
75+
96: SWGBCCUpgradeResourceSubprocessor.berserk_heal_rate_upgrade,
76+
97: AoCUpgradeResourceSubprocessor.herding_dominance_upgrade,
77+
178: AoCUpgradeResourceSubprocessor.conversion_resistance_min_rounds_upgrade,
78+
179: AoCUpgradeResourceSubprocessor.conversion_resistance_max_rounds_upgrade,
79+
183: AoCUpgradeResourceSubprocessor.reveal_enemy_upgrade,
80+
189: AoCUpgradeResourceSubprocessor.gather_wood_efficiency_upgrade,
81+
190: AoCUpgradeResourceSubprocessor.gather_food_efficiency_upgrade,
82+
191: AoCUpgradeResourceSubprocessor.relic_gold_bonus_upgrade,
83+
192: AoCUpgradeResourceSubprocessor.heresy_upgrade,
84+
193: AoCUpgradeResourceSubprocessor.theocracy_upgrade,
85+
194: AoCUpgradeResourceSubprocessor.crenellations_upgrade,
86+
196: AoCUpgradeResourceSubprocessor.wonder_time_increase_upgrade,
87+
197: AoCUpgradeResourceSubprocessor.spies_discount_upgrade,
88+
}

0 commit comments

Comments
 (0)