Combine Workshop addon and fix prison startup
Merge owned systems into one addon while preserving resource identities. Gate player admission on the replicated prison scene, restore the original framed door, and hold enemy AI until escape. Correct scenario branding and author metadata, include publishing assets, and retain regression and native verification evidence.
This commit is contained in:
+10
-10
@@ -59,11 +59,11 @@ def project_order(project):
|
||||
|
||||
|
||||
def external_request(project, source, root):
|
||||
needs_external = project in {'ai', 'chat'}
|
||||
needs_external = project in {'core'}
|
||||
if needs_external and source is None:
|
||||
raise ValueError('AI and Chat builds require --external-addons with the audited installed RHS/WCS/BMP closure')
|
||||
raise ValueError('Combined mod builds require --external-addons with the audited installed RHS/WCS/BMP closure')
|
||||
if source is not None and not needs_external:
|
||||
raise ValueError('Core, Intel and Map builds must use vanilla-only profiles; --external-addons is not permitted')
|
||||
raise ValueError('Unknown project; only the combined core addon is supported')
|
||||
if source is None:
|
||||
return None
|
||||
source = Path(source).resolve()
|
||||
@@ -127,9 +127,9 @@ def verify_package_profile(profile, steam, records):
|
||||
|
||||
def expose_external(project, profile, steam, context):
|
||||
records = {}
|
||||
if project in {'ai', 'chat'}:
|
||||
if project in {'core'}:
|
||||
if context is None:
|
||||
raise ValueError('AI and Chat native packaging require audited external inputs')
|
||||
raise ValueError('Combined mod native packaging require audited external inputs')
|
||||
verify_external(context)
|
||||
records = prepare_profile(profile/'addons', context['source'], context['policy'], context['cache_path'])
|
||||
if records != context['records']:
|
||||
@@ -300,8 +300,8 @@ def quiet_streams(application_id, sink, compat):
|
||||
|
||||
|
||||
def run_project(steam, compat, session, project, timeout, authored, silent_workbench=False, exit_after_init=False, *, external=None):
|
||||
if (project in {'ai', 'chat'}) != (external is not None):
|
||||
raise ValueError('Only AI/Chat package profiles require and permit audited external inputs')
|
||||
if (project in {'core'}) != (external is not None):
|
||||
raise ValueError('The combined addon requires audited external inputs')
|
||||
command = command_for(steam, session, project, silent_workbench, exit_after_init)
|
||||
proton = Path(command[command.index('--')+1])
|
||||
executable = Path(command[command.index('--')+3])
|
||||
@@ -506,7 +506,7 @@ def run(a, root=ROOT):
|
||||
continue_on_failure = getattr(a, 'continue_on_failure', False)
|
||||
stopped_reason = None
|
||||
for project in order:
|
||||
selected_external = external if project in {'ai', 'chat'} else None
|
||||
selected_external = external if project in {'core'} else None
|
||||
report = run_project(steam, compat, session, project, a.timeout, authored, silent_workbench, exit_after_init, external=selected_external)
|
||||
reports.append(report)
|
||||
# Diagnostic continuation never grants authority to reuse an unsafe
|
||||
@@ -588,12 +588,12 @@ def run(a, root=ROOT):
|
||||
|
||||
def main(argv=None):
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--project', choices=PROJECTS, default='core', help='Build selected addon and its successor dependencies in order')
|
||||
parser.add_argument('--project', choices=PROJECTS, default='core', help='Build the single combined addon')
|
||||
parser.add_argument('--session', type=Path, required=True, help='New direct child of /tmp; never overwritten')
|
||||
parser.add_argument('--compat', type=Path, required=True, help='Idle disposable cloned Tools prefix under /tmp')
|
||||
parser.add_argument('--steam', type=Path, default=Path.home()/'.local/share/Steam')
|
||||
parser.add_argument('--timeout', type=int, default=300, help='30..1800 seconds per addon')
|
||||
parser.add_argument('--external-addons', type=Path, help='Required for AI/Chat: installed audited RHS/WCS/BMP root; only allowlisted links enter private profiles')
|
||||
parser.add_argument('--external-addons', type=Path, help='Required for the combined mod: installed audited RHS/WCS/BMP root; only allowlisted links enter private profiles')
|
||||
lifecycle = parser.add_mutually_exclusive_group()
|
||||
lifecycle.add_argument('--silent-workbench', action='store_true', help='Opt-in documented -wbSilent experiment; packing compatibility still requires native evidence')
|
||||
lifecycle.add_argument('--exit-after-init', action='store_true', help='Opt-in documented -exitAfterInit experiment; natural exit and all native error gates remain mandatory')
|
||||
|
||||
Reference in New Issue
Block a user