@@ -224,7 +224,10 @@ def run(self, env):
224224
225225
226226 if env .variant :
227- variant_configuration_directory = package_configuration .configuration_directory + '/Variants/Active'
227+ if env .unreal_version >= 5.3 :
228+ variant_configuration_directory = package_configuration .configuration_directory + '/Custom/' + env .variant
229+ else :
230+ variant_configuration_directory = package_configuration .configuration_directory + '/Variants/Active'
228231 if os .path .exists (variant_configuration_directory ):
229232 package_configuration .configuration_directory = variant_configuration_directory
230233 variant_resource_directory = package_configuration .resource_directory + '/Variants/' + env .variant
@@ -363,15 +366,22 @@ def _setup_default_config_file(config_file):
363366 if is_monorepo_behavior :
364367 _try_remove (active_configuration_directory , False )
365368 if should_configure_variant :
366- variant_configuration_directory = f'{ project_directory } /Config/Variants/{ env .variant } '
369+ if env .unreal_version >= 5.3 :
370+ variant_configuration_directory = f'{ project_directory } /Config/Custom/{ env .variant } '
371+ else :
372+ variant_configuration_directory = f'{ project_directory } /Config/Variants/{ env .variant } '
367373 if not os .path .exists (variant_configuration_directory ):
368374 raise FileNotFoundError (f"Variant not found : { variant_configuration_directory } " )
369- logging .info (f'configuring variant { env .variant } in : { active_configuration_directory } ' )
370- shutil .copytree (variant_configuration_directory , active_configuration_directory , copy_function = shutil .copyfile )
375+ configuration_directory = variant_configuration_directory
376+ if not env .unreal_version >= 5.3 :
377+ logging .info ('configuring variant %s in : %s' , env .variant , active_configuration_directory )
378+ shutil .copytree (variant_configuration_directory , active_configuration_directory , copy_function = shutil .copyfile )
379+ configuration_directory = active_configuration_directory
380+
371381 # necessary for shader debug info in case no defaultEngine is present
372- _setup_default_config_file (f'{ active_configuration_directory } /DefaultEngine.ini' )
373- _setup_default_config_file (f'{ active_configuration_directory } /DefaultGame.ini' )
374- Package .write_project_revisions (env , active_configuration_directory )
382+ _setup_default_config_file (f'{ configuration_directory } /DefaultEngine.ini' )
383+ _setup_default_config_file (f'{ configuration_directory } /DefaultGame.ini' )
384+ Package .write_project_revisions (env , configuration_directory )
375385 if env .unreal_platform == 'PS5' :
376386 # UE only supports a single TitleConfiguration.json describing builds of the same package.
377387 # To have DLCs in their own packages, we need to select the variant's one by copying it
@@ -412,12 +422,18 @@ def enumerate_unreal_configs(env):
412422 # order matters: from deepest ini to broadest (deep<-variant<-platform<-game)
413423 config_files_patterns = []
414424 if hasattr (env , 'variant' ) and env .variant :
415- config_files_patterns .extend ([
416- '{uproject_dir}/Config/Variants/Active/{cook_platform}/{cook_platform}Game.ini' ,
417- '{uproject_dir}/Config/Variants/{variant}/{cook_platform}/{cook_platform}Game.ini' ,
418- '{uproject_dir}/Config/Variants/Active/DefaultGame.ini' ,
419- '{uproject_dir}/Config/Variants/{variant}/DefaultGame.ini'
420- ])
425+ if env .unreal_version >= 5.3 :
426+ config_files_patterns .extend ([
427+ '{uproject_dir}/Config/{cook_platform}/Custom/{variant}/{cook_platform}Game.ini' ,
428+ '{uproject_dir}/Config/Custom/{variant}/DefaultGame.ini'
429+ ])
430+ else :
431+ config_files_patterns .extend ([
432+ '{uproject_dir}/Config/Variants/Active/{cook_platform}/{cook_platform}Game.ini' ,
433+ '{uproject_dir}/Config/Variants/{variant}/{cook_platform}/{cook_platform}Game.ini' ,
434+ '{uproject_dir}/Config/Variants/Active/DefaultGame.ini' ,
435+ '{uproject_dir}/Config/Variants/{variant}/DefaultGame.ini'
436+ ])
421437 config_files_patterns .extend ([
422438 '{uproject_dir}/Platforms/{cook_platform}/Config/DefaultGame.ini' ,
423439 '{uproject_dir}/Config/DefaultGame.ini' ,
@@ -694,7 +710,11 @@ def cook(env, package_configuration):
694710 cook_command += shlex .split (option )
695711
696712 # Load the active variant
697- cook_command += [ '-DNEConfigVariant' ]
713+ if env .unreal_version >= 5.3 :
714+ if env .variant :
715+ cook_command += [ f'-CustomConfig={ env .variant } ' ]
716+ else :
717+ cook_command += [ '-DNEConfigVariant' ]
698718
699719 if package_configuration .shader_debug_info :
700720 sdb_path = package_configuration .project_directory + '/Saved/ShaderDebugInfo/' + package_configuration .target_platform
@@ -790,6 +810,10 @@ def stage(env, package_configuration):
790810 if env .is_dne_legacy_ue4 :
791811 stage_command += [ '-SkipPak' ]
792812
813+ if env .unreal_version >= 5.3 :
814+ if env .variant :
815+ stage_command += [ f'-CustomConfig={ env .variant } ' ]
816+
793817 stage_success = nimp .sys .process .call (stage_command , dry_run = env .dry_run , heartbeat = 60 )
794818 if stage_success != 0 :
795819 raise RuntimeError ('Stage failed' )
@@ -1280,6 +1304,10 @@ def package_with_uat(env, package_configuration):
12801304 if package_configuration .no_compile_packaging :
12811305 package_command += [ '-NoCompile' ]
12821306
1307+ if env .unreal_version >= 5.3 :
1308+ if env .variant :
1309+ package_command += [ f'-CustomConfig={ env .variant } ' ]
1310+
12831311 for option in package_configuration .extra_options :
12841312 package_command += shlex .split (option )
12851313
0 commit comments