@@ -97,7 +97,8 @@ func reorder_autoloads() -> void:
97
97
original_autoloads [name ] = value
98
98
99
99
ModLoaderSetupLog .info (
100
- "Start reorder autoloads current state: %s " % JSON .stringify (original_autoloads , "\t " )
100
+ "Start reorder autoloads current state: %s " % JSON .stringify (original_autoloads , "\t " ),
101
+ LOG_NAME
101
102
)
102
103
103
104
for autoload in original_autoloads .keys ():
@@ -123,7 +124,8 @@ func reorder_autoloads() -> void:
123
124
new_autoloads [name ] = value
124
125
125
126
ModLoaderSetupLog .info (
126
- "Reorder autoloads completed - new state: %s " % JSON .stringify (new_autoloads , "\t " )
127
+ "Reorder autoloads completed - new state: %s " % JSON .stringify (new_autoloads , "\t " ),
128
+ LOG_NAME
127
129
)
128
130
129
131
@@ -145,6 +147,10 @@ func handle_override_cfg() -> void:
145
147
146
148
# Creates the project.binary file, adds it to the pck and removes the no longer needed project.binary file.
147
149
func handle_injection () -> void :
150
+ var is_embedded : bool = not FileAccess .file_exists (path .pck )
151
+ var injection_path : String = path .exe if is_embedded else path .pck
152
+ var file_extension := injection_path .get_extension ()
153
+
148
154
ModLoaderSetupLog .debug ("Start injection" , LOG_NAME )
149
155
# Create temp dir
150
156
ModLoaderSetupLog .debug ('Creating temp dir at "%s "' % path .temp_dir_path , LOG_NAME )
@@ -167,83 +173,59 @@ func handle_injection() -> void:
167
173
DirAccess .make_dir_recursive_absolute (path .temp_dir_path .path_join (".godot" ))
168
174
# Save the global class cache config file
169
175
combined_global_script_class_cache_file .save (path .temp_global_script_class_cache_path )
170
- get_pck_version ()
171
- # Check if .pck is embedded split it from the .exe
172
- if not FileAccess .file_exists (path .pck ):
173
- split_pck ()
174
176
175
- inject ()
177
+ inject (injection_path , is_embedded )
176
178
177
179
# Rename vanilla
178
- DirAccess .rename_absolute (
179
- path .pck ,
180
- path .pck .trim_suffix ("%s .pck" % file_name .pck ).path_join ("%s -vanilla.pck" % file_name .pck )
181
- )
182
- ModLoaderSetupLog .debug (
183
- (
184
- 'Renamed "%s " to "%s "'
185
- % [
186
- path .pck ,
187
- path .pck .trim_suffix ("%s .pck" % file_name .pck ).path_join (
188
- "%s -vanilla.pck" % file_name .pck
189
- )
190
- ]
191
- ),
192
- LOG_NAME
193
- )
194
- # Rename modded
195
- DirAccess .rename_absolute (
196
- path .game_base_dir .path_join ("%s -modded.pck" % file_name .pck ),
197
- "%s .pck" % path .game_base_dir .path_join (file_name .pck )
198
- )
199
- ModLoaderSetupLog .debug (
200
- (
201
- 'Renamed "%s " to "%s "'
202
- % [
203
- path .game_base_dir .path_join ("%s -modded.pck" % file_name .pck ),
204
- "%s .pck" % path .game_base_dir .path_join (file_name .pck )
205
- ]
206
- ),
207
- LOG_NAME
208
- )
180
+ var modded_path := "%s -modded.%s " % [injection_path .get_basename (), file_extension ]
181
+ var vanilla_path := "%s -vanilla.%s " % [injection_path .get_basename (), file_extension ]
209
182
210
- clean_up ()
183
+ DirAccess .rename_absolute (injection_path , vanilla_path )
184
+ ModLoaderSetupLog .debug ('Renamed "%s " to "%s "' % [injection_path , vanilla_path ], LOG_NAME )
211
185
186
+ # Rename modded
187
+ DirAccess .rename_absolute (modded_path , injection_path )
188
+ ModLoaderSetupLog .debug ('Renamed "%s " to "%s "' % [modded_path , injection_path ], LOG_NAME )
212
189
213
- func get_pck_version () -> String :
214
- var engine_version_info := Engine .get_version_info ()
215
- # Godot 4 pck version always starts with a 2 (at least for now).
216
- var pck_version := (
217
- "2.%s .%s .%s "
218
- % [engine_version_info .major , engine_version_info .minor , engine_version_info .patch ]
219
- )
220
- ModLoaderSetupLog .debug ("The pck version is: %s " % pck_version , LOG_NAME )
221
- return pck_version
190
+ clean_up ()
222
191
223
192
224
193
# Add modified binary to the pck
225
- func inject (pck_version : String = get_pck_version ()) -> void :
226
- var arguments := [
227
- "-pc" ,
228
- path .pck ,
229
- path .temp_dir_path ,
230
- path .game_base_dir .path_join ("%s -modded.pck" % file_name .pck ),
231
- pck_version
232
- ]
233
- ModLoaderSetupLog .debug (
234
- "Injecting temp dir content into .pck: %s %s " , [path .pck_explorer , arguments ], LOG_NAME
194
+ func inject (injection_path : String , is_embedded := false ) -> void :
195
+ var arguments := []
196
+ arguments .push_back ("--headless" )
197
+ arguments .push_back ("--pck-patch=%s " % injection_path )
198
+ if is_embedded :
199
+ arguments .push_back ("--embed=%s " % injection_path )
200
+ arguments .push_back (
201
+ "--patch-file=%s =%s " % [path .temp_project_binary_path , path .project_binary_path_internal ]
235
202
)
236
- # For unknown reasons the output only displays a single "[" - so only the executed arguments are logged.
237
- var _exit_code_inject := OS .execute (path .pck_explorer , arguments )
238
-
239
-
240
- func split_pck () -> void :
241
- var arguments := ["-s" , path .exe ]
242
- ModLoaderSetupLog .debug (
243
- "Splitting .pck from .exe: %s %s " , [path .pck_explorer , arguments ], LOG_NAME
203
+ arguments .push_back (
204
+ (
205
+ "--patch-file=%s =%s "
206
+ % [
207
+ path .temp_global_script_class_cache_path ,
208
+ path .global_script_class_cache_path_internal
209
+ ]
210
+ )
211
+ )
212
+ arguments .push_back (
213
+ (
214
+ "--output=%s "
215
+ % path .game_base_dir .path_join (
216
+ (
217
+ "%s -modded.%s "
218
+ % [file_name [injection_path .get_extension ()], injection_path .get_extension ()]
219
+ )
220
+ )
221
+ )
244
222
)
223
+
245
224
# For unknown reasons the output only displays a single "[" - so only the executed arguments are logged.
246
- var _exit_code_split_pck := OS .execute (path .pck_explorer , arguments )
225
+ ModLoaderSetupLog .debug ("Injection started: %s %s " % [path .gdre , arguments ], LOG_NAME )
226
+ var output := []
227
+ var _exit_code_inject := OS .execute (path .gdre , arguments , output )
228
+ ModLoaderSetupLog .debug ("Injection completed: %s " % output , LOG_NAME )
247
229
248
230
249
231
# Removes the temp files
@@ -268,17 +250,15 @@ func setup_file_data() -> void:
268
250
path .game_base_dir = ModLoaderSetupUtils .get_local_folder_dir ()
269
251
# C:/path/to/game/addons/mod_loader
270
252
path .mod_loader_dir = path .game_base_dir + "addons/mod_loader/"
271
- path .pck_explorer = (
272
- path .mod_loader_dir
273
- + get_pck_explorer_path ()
274
- )
275
- # ! pck explorer doesn't like trailing `/` in a path !
253
+ path .gdre = path .mod_loader_dir + get_gdre_path ()
276
254
path .temp_dir_path = path .mod_loader_dir + "setup/temp"
277
255
path .temp_project_binary_path = path .temp_dir_path + "/project.binary"
278
256
path .temp_global_script_class_cache_path = (
279
257
path .temp_dir_path
280
258
+ "/.godot/global_script_class_cache.cfg"
281
259
)
260
+ path .global_script_class_cache_path_internal = "res://.godot/global_script_class_cache.cfg"
261
+ path .project_binary_path_internal = "res://project.binary"
282
262
# can be supplied to override the exe_name
283
263
file_name .cli_arg_exe = ModLoaderSetupUtils .get_cmd_line_arg_value ("--exe-name" )
284
264
# can be supplied to override the pck_name
@@ -347,13 +327,11 @@ func get_combined_global_script_class_cache() -> ConfigFile:
347
327
return global_script_class_cache_combined
348
328
349
329
350
- func get_pck_explorer_path () -> String :
351
- var pck_explorer_path := "vendor/GodotPCKExplorer/GodotPCKExplorer.Console"
352
-
330
+ func get_gdre_path () -> String :
353
331
if OS .get_name () == "Windows" :
354
- return "%s .exe" % pck_explorer_path
332
+ return "vendor/GDRE/gdre_tools .exe"
355
333
356
- return pck_explorer_path
334
+ return ""
357
335
358
336
359
337
func restart () -> void :
0 commit comments