Skip to content

Commit e927a93

Browse files
committed
convert: Refactor SWBGCCCivSubprocessor into separate files.
1 parent d9f85da commit e927a93

File tree

6 files changed

+183
-143
lines changed

6 files changed

+183
-143
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ add_py_modules(
1414

1515
add_subdirectory(ability)
1616
add_subdirectory(auxiliary)
17+
add_subdirectory(civ)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
add_py_modules(
2+
__init__.py
3+
modifiers.py
4+
starting_resources.py
5+
)
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+
Creates patches and modifiers for civs.
5+
"""
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Copyright 2025-2025 the openage authors. See copying.md for legal info.
2+
3+
"""
4+
nyan conversion routines for civ modifiers.
5+
"""
6+
from __future__ import annotations
7+
import typing
8+
9+
10+
if typing.TYPE_CHECKING:
11+
from .....value_object.conversion.forward_ref import ForwardRef
12+
from .....entity_object.conversion.aoc.genie_civ import GenieCivilizationGroup
13+
14+
15+
def get_modifiers(civ_group: GenieCivilizationGroup) -> list[ForwardRef]:
16+
"""
17+
Returns global modifiers of a civ.
18+
"""
19+
modifiers = []
20+
21+
for civ_bonus in civ_group.civ_boni.values():
22+
if civ_bonus.replaces_researchable_tech():
23+
# TODO: instant tech research modifier
24+
pass
25+
26+
return modifiers
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
# Copyright 2025-2025 the openage authors. See copying.md for legal info.
2+
3+
"""
4+
nyan conversion routines for civ starting resources.
5+
"""
6+
from __future__ import annotations
7+
import typing
8+
9+
from .....entity_object.conversion.converter_object import RawAPIObject
10+
from .....service.conversion import internal_name_lookups
11+
from .....value_object.conversion.forward_ref import ForwardRef
12+
13+
if typing.TYPE_CHECKING:
14+
from .....entity_object.conversion.aoc.genie_civ import GenieCivilizationGroup
15+
16+
17+
def get_starting_resources(civ_group: GenieCivilizationGroup) -> list[ForwardRef]:
18+
"""
19+
Returns the starting resources of a civ.
20+
"""
21+
resource_amounts = []
22+
23+
civ_id = civ_group.get_id()
24+
dataset = civ_group.data
25+
26+
civ_lookup_dict = internal_name_lookups.get_civ_lookups(dataset.game_version)
27+
28+
civ_name = civ_lookup_dict[civ_id][0]
29+
30+
# Find starting resource amounts
31+
food_amount = civ_group.civ["resources"][91].value
32+
carbon_amount = civ_group.civ["resources"][92].value
33+
nova_amount = civ_group.civ["resources"][93].value
34+
ore_amount = civ_group.civ["resources"][94].value
35+
36+
# Find civ unique starting resources
37+
tech_tree = civ_group.get_tech_tree_effects()
38+
for effect in tech_tree:
39+
type_id = effect.get_type()
40+
41+
if type_id != 1:
42+
continue
43+
44+
resource_id = effect["attr_a"].value
45+
amount = effect["attr_d"].value
46+
if resource_id == 91:
47+
food_amount += amount
48+
49+
elif resource_id == 92:
50+
carbon_amount += amount
51+
52+
elif resource_id == 93:
53+
nova_amount += amount
54+
55+
elif resource_id == 94:
56+
ore_amount += amount
57+
58+
food_ref = f"{civ_name}.FoodStartingAmount"
59+
food_raw_api_object = RawAPIObject(food_ref, "FoodStartingAmount",
60+
dataset.nyan_api_objects)
61+
food_raw_api_object.add_raw_parent("engine.util.resource.ResourceAmount")
62+
civ_location = ForwardRef(civ_group, civ_lookup_dict[civ_group.get_id()][0])
63+
food_raw_api_object.set_location(civ_location)
64+
65+
resource = dataset.pregen_nyan_objects["util.resource.types.Food"].get_nyan_object()
66+
food_raw_api_object.add_raw_member("type",
67+
resource,
68+
"engine.util.resource.ResourceAmount")
69+
70+
food_raw_api_object.add_raw_member("amount",
71+
food_amount,
72+
"engine.util.resource.ResourceAmount")
73+
74+
food_forward_ref = ForwardRef(civ_group, food_ref)
75+
resource_amounts.append(food_forward_ref)
76+
77+
carbon_ref = f"{civ_name}.CarbonStartingAmount"
78+
carbon_raw_api_object = RawAPIObject(carbon_ref, "CarbonStartingAmount",
79+
dataset.nyan_api_objects)
80+
carbon_raw_api_object.add_raw_parent("engine.util.resource.ResourceAmount")
81+
civ_location = ForwardRef(civ_group, civ_lookup_dict[civ_group.get_id()][0])
82+
carbon_raw_api_object.set_location(civ_location)
83+
84+
resource = dataset.pregen_nyan_objects["util.resource.types.Carbon"].get_nyan_object()
85+
carbon_raw_api_object.add_raw_member("type",
86+
resource,
87+
"engine.util.resource.ResourceAmount")
88+
89+
carbon_raw_api_object.add_raw_member("amount",
90+
carbon_amount,
91+
"engine.util.resource.ResourceAmount")
92+
93+
carbon_forward_ref = ForwardRef(civ_group, carbon_ref)
94+
resource_amounts.append(carbon_forward_ref)
95+
96+
nova_ref = f"{civ_name}.NovaStartingAmount"
97+
nova_raw_api_object = RawAPIObject(nova_ref, "NovaStartingAmount",
98+
dataset.nyan_api_objects)
99+
nova_raw_api_object.add_raw_parent("engine.util.resource.ResourceAmount")
100+
civ_location = ForwardRef(civ_group, civ_lookup_dict[civ_group.get_id()][0])
101+
nova_raw_api_object.set_location(civ_location)
102+
103+
resource = dataset.pregen_nyan_objects["util.resource.types.Nova"].get_nyan_object()
104+
nova_raw_api_object.add_raw_member("type",
105+
resource,
106+
"engine.util.resource.ResourceAmount")
107+
108+
nova_raw_api_object.add_raw_member("amount",
109+
nova_amount,
110+
"engine.util.resource.ResourceAmount")
111+
112+
nova_forward_ref = ForwardRef(civ_group, nova_ref)
113+
resource_amounts.append(nova_forward_ref)
114+
115+
ore_ref = f"{civ_name}.OreStartingAmount"
116+
ore_raw_api_object = RawAPIObject(ore_ref, "OreStartingAmount",
117+
dataset.nyan_api_objects)
118+
ore_raw_api_object.add_raw_parent("engine.util.resource.ResourceAmount")
119+
civ_location = ForwardRef(civ_group, civ_lookup_dict[civ_group.get_id()][0])
120+
ore_raw_api_object.set_location(civ_location)
121+
122+
resource = dataset.pregen_nyan_objects["util.resource.types.Ore"].get_nyan_object()
123+
ore_raw_api_object.add_raw_member("type",
124+
resource,
125+
"engine.util.resource.ResourceAmount")
126+
127+
ore_raw_api_object.add_raw_member("amount",
128+
ore_amount,
129+
"engine.util.resource.ResourceAmount")
130+
131+
ore_forward_ref = ForwardRef(civ_group, ore_ref)
132+
resource_amounts.append(ore_forward_ref)
133+
134+
civ_group.add_raw_api_object(food_raw_api_object)
135+
civ_group.add_raw_api_object(carbon_raw_api_object)
136+
civ_group.add_raw_api_object(nova_raw_api_object)
137+
civ_group.add_raw_api_object(ore_raw_api_object)
138+
139+
return resource_amounts

openage/convert/processor/conversion/swgbcc/civ_subprocessor.py

Lines changed: 7 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
from __future__ import annotations
99
import typing
1010

11-
from ....entity_object.conversion.converter_object import RawAPIObject
12-
from ....service.conversion import internal_name_lookups
13-
from ....value_object.conversion.forward_ref import ForwardRef
1411
from ..aoc.civ_subprocessor import AoCCivSubprocessor
1512
from .tech_subprocessor import SWGBCCTechSubprocessor
1613

14+
from .civ.modifiers import get_modifiers
15+
from .civ.starting_resources import get_starting_resources
16+
1717
if typing.TYPE_CHECKING:
18-
from openage.convert.entity_object.conversion.aoc.genie_civ import GenieCivilizationGroup
19-
from openage.convert.entity_object.conversion.aoc.genie_unit import GenieGameEntityGroup
18+
from ....value_object.conversion.forward_ref import ForwardRef
19+
from ....entity_object.conversion.aoc.genie_civ import GenieCivilizationGroup
2020

2121

2222
class SWGBCCCivSubprocessor:
@@ -42,141 +42,5 @@ def get_civ_setup(cls, civ_group: GenieCivilizationGroup) -> list[ForwardRef]:
4242

4343
return patches
4444

45-
@classmethod
46-
def get_modifiers(cls, civ_group: GenieCivilizationGroup) -> list[ForwardRef]:
47-
"""
48-
Returns global modifiers of a civ.
49-
"""
50-
modifiers = []
51-
52-
for civ_bonus in civ_group.civ_boni.values():
53-
if civ_bonus.replaces_researchable_tech():
54-
# TODO: instant tech research modifier
55-
pass
56-
57-
return modifiers
58-
59-
@staticmethod
60-
def get_starting_resources(civ_group: GenieCivilizationGroup) -> list[ForwardRef]:
61-
"""
62-
Returns the starting resources of a civ.
63-
"""
64-
resource_amounts = []
65-
66-
civ_id = civ_group.get_id()
67-
dataset = civ_group.data
68-
69-
civ_lookup_dict = internal_name_lookups.get_civ_lookups(dataset.game_version)
70-
71-
civ_name = civ_lookup_dict[civ_id][0]
72-
73-
# Find starting resource amounts
74-
food_amount = civ_group.civ["resources"][91].value
75-
carbon_amount = civ_group.civ["resources"][92].value
76-
nova_amount = civ_group.civ["resources"][93].value
77-
ore_amount = civ_group.civ["resources"][94].value
78-
79-
# Find civ unique starting resources
80-
tech_tree = civ_group.get_tech_tree_effects()
81-
for effect in tech_tree:
82-
type_id = effect.get_type()
83-
84-
if type_id != 1:
85-
continue
86-
87-
resource_id = effect["attr_a"].value
88-
amount = effect["attr_d"].value
89-
if resource_id == 91:
90-
food_amount += amount
91-
92-
elif resource_id == 92:
93-
carbon_amount += amount
94-
95-
elif resource_id == 93:
96-
nova_amount += amount
97-
98-
elif resource_id == 94:
99-
ore_amount += amount
100-
101-
food_ref = f"{civ_name}.FoodStartingAmount"
102-
food_raw_api_object = RawAPIObject(food_ref, "FoodStartingAmount",
103-
dataset.nyan_api_objects)
104-
food_raw_api_object.add_raw_parent("engine.util.resource.ResourceAmount")
105-
civ_location = ForwardRef(civ_group, civ_lookup_dict[civ_group.get_id()][0])
106-
food_raw_api_object.set_location(civ_location)
107-
108-
resource = dataset.pregen_nyan_objects["util.resource.types.Food"].get_nyan_object()
109-
food_raw_api_object.add_raw_member("type",
110-
resource,
111-
"engine.util.resource.ResourceAmount")
112-
113-
food_raw_api_object.add_raw_member("amount",
114-
food_amount,
115-
"engine.util.resource.ResourceAmount")
116-
117-
food_forward_ref = ForwardRef(civ_group, food_ref)
118-
resource_amounts.append(food_forward_ref)
119-
120-
carbon_ref = f"{civ_name}.CarbonStartingAmount"
121-
carbon_raw_api_object = RawAPIObject(carbon_ref, "CarbonStartingAmount",
122-
dataset.nyan_api_objects)
123-
carbon_raw_api_object.add_raw_parent("engine.util.resource.ResourceAmount")
124-
civ_location = ForwardRef(civ_group, civ_lookup_dict[civ_group.get_id()][0])
125-
carbon_raw_api_object.set_location(civ_location)
126-
127-
resource = dataset.pregen_nyan_objects["util.resource.types.Carbon"].get_nyan_object()
128-
carbon_raw_api_object.add_raw_member("type",
129-
resource,
130-
"engine.util.resource.ResourceAmount")
131-
132-
carbon_raw_api_object.add_raw_member("amount",
133-
carbon_amount,
134-
"engine.util.resource.ResourceAmount")
135-
136-
carbon_forward_ref = ForwardRef(civ_group, carbon_ref)
137-
resource_amounts.append(carbon_forward_ref)
138-
139-
nova_ref = f"{civ_name}.NovaStartingAmount"
140-
nova_raw_api_object = RawAPIObject(nova_ref, "NovaStartingAmount",
141-
dataset.nyan_api_objects)
142-
nova_raw_api_object.add_raw_parent("engine.util.resource.ResourceAmount")
143-
civ_location = ForwardRef(civ_group, civ_lookup_dict[civ_group.get_id()][0])
144-
nova_raw_api_object.set_location(civ_location)
145-
146-
resource = dataset.pregen_nyan_objects["util.resource.types.Nova"].get_nyan_object()
147-
nova_raw_api_object.add_raw_member("type",
148-
resource,
149-
"engine.util.resource.ResourceAmount")
150-
151-
nova_raw_api_object.add_raw_member("amount",
152-
nova_amount,
153-
"engine.util.resource.ResourceAmount")
154-
155-
nova_forward_ref = ForwardRef(civ_group, nova_ref)
156-
resource_amounts.append(nova_forward_ref)
157-
158-
ore_ref = f"{civ_name}.OreStartingAmount"
159-
ore_raw_api_object = RawAPIObject(ore_ref, "OreStartingAmount",
160-
dataset.nyan_api_objects)
161-
ore_raw_api_object.add_raw_parent("engine.util.resource.ResourceAmount")
162-
civ_location = ForwardRef(civ_group, civ_lookup_dict[civ_group.get_id()][0])
163-
ore_raw_api_object.set_location(civ_location)
164-
165-
resource = dataset.pregen_nyan_objects["util.resource.types.Ore"].get_nyan_object()
166-
ore_raw_api_object.add_raw_member("type",
167-
resource,
168-
"engine.util.resource.ResourceAmount")
169-
170-
ore_raw_api_object.add_raw_member("amount",
171-
ore_amount,
172-
"engine.util.resource.ResourceAmount")
173-
174-
ore_forward_ref = ForwardRef(civ_group, ore_ref)
175-
resource_amounts.append(ore_forward_ref)
176-
177-
civ_group.add_raw_api_object(food_raw_api_object)
178-
civ_group.add_raw_api_object(carbon_raw_api_object)
179-
civ_group.add_raw_api_object(nova_raw_api_object)
180-
civ_group.add_raw_api_object(ore_raw_api_object)
181-
182-
return resource_amounts
45+
get_modifiers = staticmethod(get_modifiers)
46+
get_starting_resources = staticmethod(get_starting_resources)

0 commit comments

Comments
 (0)