@@ -44,71 +44,79 @@ func start(mapPath):
44
44
LOAD_CFG_CAMPAIGN : oGame .GAME_DIRECTORY .plus_file (campaign_cfg .get ("common" , {}).get ("CONFIGS_LOCATION" , "" )),
45
45
LOAD_CFG_CURRENT_MAP : mapPath .get_basename ()
46
46
}
47
- for cfg_type in [LOAD_CFG_FXDATA , LOAD_CFG_CAMPAIGN , LOAD_CFG_CURRENT_MAP ]:
48
- var cfg_dir = config_dirs [cfg_type ]
49
- for i in files_to_load .size ():
50
- var file_name = files_to_load [i ]
47
+
48
+ var file_exists = File .new ()
49
+
50
+ for i in files_to_load .size ():
51
+ var CODETIME_START = OS .get_ticks_msec ()
52
+ var file_name = files_to_load [i ]
53
+
54
+ var combined_cfg = {}
55
+
56
+ for cfg_type in [LOAD_CFG_FXDATA , LOAD_CFG_CAMPAIGN , LOAD_CFG_CURRENT_MAP ]:
57
+ var cfg_dir = config_dirs [cfg_type ]
51
58
var file_path = cfg_dir .plus_file (file_name )
52
59
if cfg_type == LOAD_CFG_CURRENT_MAP :
53
60
file_path = cfg_dir + "." + file_name
54
61
55
- print ( "CFG loader: " , file_path )
56
-
57
- if File . new (). file_exists ( file_path ):
62
+ if file_exists . file_exists ( file_path ):
63
+
64
+ # ALL OTHER FILES GET DEFAULTED TO BEING LOADED AS A DKCFG FILE
58
65
match file_name :
59
- "objects.cfg" :
60
- load_objects_data (file_path )
61
- "creature.cfg" :
62
- load_creatures_data (file_path )
63
- "trapdoor.cfg" :
64
- load_trapdoor_data (file_path )
65
- "terrain.cfg" :
66
- load_terrain_data (file_path )
67
- "cubes.cfg" :
68
- load_cubes_data (file_path )
69
- "slabset.toml" :
70
- load_slabset_data (file_path )
71
- "columnset.toml" :
72
- load_columnset_data (file_path )
73
-
66
+ "slabset.toml" : Slabset .import_toml_slabset (file_path ) # .toml import gets run multiple times instead of combining
67
+ "columnset.toml" : Columnset .import_toml_columnset (file_path )
68
+ _ :
69
+ var cfgData = Utils .read_dkcfg_file (file_path )
70
+ combined_cfg = Utils .super_merge (combined_cfg , cfgData )
71
+
74
72
paths_loaded [cfg_type ].resize (files_to_load .size ())
75
73
paths_loaded [cfg_type ][i ] = file_path
76
74
else :
77
75
if cfg_type == LOAD_CFG_FXDATA :
78
76
match file_name :
79
- "cubes.cfg" :
80
- Cube .load_dk_original_cubes ()
81
- "slabset.toml" :
82
- Slabset .load_default_original_slabset ()
83
- "columnset.toml" :
84
- Columnset .load_default_original_columnset ()
85
-
77
+ "cubes.cfg" : Cube .load_dk_original_cubes ()
78
+ "slabset.toml" : Slabset .load_default_original_slabset ()
79
+ "columnset.toml" : Columnset .load_default_original_columnset ()
80
+
81
+ # if file_name == "objects.cfg":
82
+ # print(combined_cfg)
83
+
84
+ # Only load cfg after they've been combined (they're combined so they'll automatically have fallbacks)
85
+ match file_name :
86
+ "objects.cfg" : load_objects_data (combined_cfg )
87
+ "creature.cfg" : load_creatures_data (combined_cfg )
88
+ "trapdoor.cfg" : load_trapdoor_data (combined_cfg )
89
+ "terrain.cfg" : load_terrain_data (combined_cfg )
90
+ "cubes.cfg" : Cube .read_cubes_cfg (combined_cfg )
91
+
86
92
print ('Loaded all .cfg and .toml files: ' + str (OS .get_ticks_msec () - CODETIME_LOADCFG_START ) + 'ms' )
87
93
if oConfigFilesListWindow .visible == true :
88
94
Utils .popup_centered (oConfigFilesListWindow )
89
95
90
96
oCustomSlabSystem .load_unearth_custom_slabs_file ()
91
97
92
- func load_objects_data ( path ): # 10ms
93
- var objects_cfg = Utils . read_dkcfg_file ( path )
94
- for section in objects_cfg :
98
+
99
+ func load_objects_data ( cfg ): # 10ms
100
+ for section in cfg :
95
101
if section .begins_with ("object" ):
96
102
var id = int (section )
97
103
if id == 0 : continue
98
104
if id >= 136 or id in [100 , 101 , 102 , 103 , 104 , 105 ]: # Dummy Boxes should be overwritten
99
- var objSection = objects_cfg [section ]
105
+ var objSection = cfg [section ]
100
106
var newName
101
107
var animID
102
108
var newSprite
103
109
var newEditorTab
104
110
var newGenre
105
111
106
- if Things .DATA_OBJECT .has (id ) == true : # Existing values are written by other calls to load_objects_data() (can be from /fxdata/, campaign, local map, etc.)
112
+
113
+ if Things .DATA_OBJECT .has (id ) == true :
107
114
newName = objSection .get ("Name" , Things .DATA_OBJECT [id ][Things .NAME_ID ])
108
115
109
116
animID = objSection .get ("AnimationID" )
110
117
newSprite = get_sprite (animID , newName )
111
- if newSprite == null : newSprite = Things .DATA_OBJECT [id ][Things .SPRITE ]
118
+ if newSprite == null :
119
+ newSprite = Things .DATA_OBJECT [id ][Things .SPRITE ]
112
120
113
121
newGenre = objSection .get ("Genre" )
114
122
newEditorTab = Things .GENRE_TO_TAB .get (newGenre , Things .DATA_OBJECT [id ][Things .EDITOR_TAB ])
@@ -121,18 +129,21 @@ func load_objects_data(path): # 10ms
121
129
newGenre = objSection .get ("Genre" )
122
130
newEditorTab = Things .GENRE_TO_TAB .get (newGenre , Things .TAB_DECORATION )
123
131
132
+ if id == 161 :
133
+ print ('-------------------------' )
134
+ print (newGenre )
135
+ print ('-------------------------' )
124
136
125
137
Things .DATA_OBJECT [id ] = [newName , newSprite , newEditorTab ]
126
138
127
139
128
140
var keeperfx_edited_slabs = [Slabs .GEMS ] # This is to help with backwards compatibility for previous keeperfx versions that don't have these edits.
129
- func load_terrain_data (path ): # 4ms
130
- var terrain_cfg = Utils .read_dkcfg_file (path )
131
- for section in terrain_cfg :
141
+ func load_terrain_data (cfg ): # 4ms
142
+ for section in cfg :
132
143
if section .begins_with ("slab" ):
133
144
var id = int (section )
134
145
if id >= 55 or id in keeperfx_edited_slabs :
135
- var slabSection = terrain_cfg [section ]
146
+ var slabSection = cfg [section ]
136
147
137
148
var setName = slabSection .get ("Name" , "UNKNOWN" )
138
149
@@ -188,19 +199,17 @@ func load_terrain_data(path): # 4ms
188
199
]
189
200
190
201
191
- func load_creatures_data (path ): # 3ms
192
- var creature_cfg = Utils .read_dkcfg_file (path )
193
- var creatures = creature_cfg .get ("common" , {}).get ("Creatures" , [])
202
+ func load_creatures_data (cfg ): # 3ms
203
+ var creatures = cfg .get ("common" , {}).get ("Creatures" , [])
194
204
for id_number in creatures .size ():
195
205
var creature_id = id_number + 1
196
206
if not Things .DATA_CREATURE .has (creature_id ):
197
207
var newName = creatures [id_number ]
198
208
var newSprite = get_sprite (newName , null )
199
209
Things .DATA_CREATURE [creature_id ] = [newName , newSprite , Things .TAB_CREATURE ]
200
210
201
- func load_trapdoor_data (path ): # 1ms
202
- var trapdoor_cfg = Utils .read_dkcfg_file (path )
203
- for section in trapdoor_cfg :
211
+ func load_trapdoor_data (cfg ): # 1ms
212
+ for section in cfg :
204
213
var id = int (section )
205
214
if id == 0 : continue
206
215
var trapOrDoor = - 1
@@ -211,7 +220,7 @@ func load_trapdoor_data(path): # 1ms
211
220
else :
212
221
continue
213
222
214
- var data = trapdoor_cfg [section ]
223
+ var data = cfg [section ]
215
224
var newName = data .get ("Name" , null )
216
225
var newSprite = get_sprite (newName , null )
217
226
var crateName = data .get ("Crate" , null )
@@ -247,13 +256,3 @@ func load_campaign_data(mapPath):
247
256
# print(oGame.GAME_DIRECTORY.plus_file(levelsLocation).to_lower())
248
257
return cfgDictionary
249
258
return {}
250
-
251
-
252
- func load_cubes_data (file_path ): # 6ms
253
- Cube .read_cubes_cfg (file_path )
254
-
255
- func load_slabset_data (file_path ): # 33ms
256
- Slabset .import_toml_slabset (file_path )
257
-
258
- func load_columnset_data (file_path ): # 29ms
259
- Columnset .import_toml_columnset (file_path )
0 commit comments