Observe native prison lock geometry and requalify Core loops
This commit is contained in:
+10
-3
@@ -622,6 +622,8 @@ def display_probe_result(context, session):
|
||||
|
||||
|
||||
def validate_input_observer(a):
|
||||
if getattr(a, 'observe_prison_gate', False) and not getattr(a, 'observe_player_input', False):
|
||||
refuse('Prison gate observation requires the existing input observer')
|
||||
if not getattr(a, 'observe_player_input', False):
|
||||
return
|
||||
if a.project == CONTROL or getattr(a, 'packed_core', None) or getattr(a, 'packed_addons', None):
|
||||
@@ -644,18 +646,22 @@ def validate_input_exercise(a):
|
||||
refuse('Input exercise requires --settle >=50')
|
||||
|
||||
|
||||
def input_observer_command(command, project, packed, nonce, look=False):
|
||||
def input_observer_command(command, project, packed, nonce, look=False, gate=False):
|
||||
if project not in {'core', 'chat'} or packed is not None:
|
||||
refuse('Input observation requires loose Core or Chat')
|
||||
if not re.fullmatch(r'[A-Za-z0-9]{1,32}', nonce):
|
||||
refuse('Input observer nonce must contain 1..32 ASCII letters/digits')
|
||||
if type(look) is not bool:
|
||||
refuse('Relative look selection must be boolean')
|
||||
if any(value.startswith(('-errOrdinaryInput', '-errOrdinaryLook')) for value in command):
|
||||
if type(gate) is not bool:
|
||||
refuse('Prison gate observation selection must be boolean')
|
||||
if any(value.startswith(('-errOrdinaryInput', '-errOrdinaryLook', '-errOrdinaryGate')) for value in command):
|
||||
refuse('Input observer command already has observer options')
|
||||
options = ['-errOrdinaryInputObserve', nonce, '-errOrdinaryInputScreenshots', '1']
|
||||
if look:
|
||||
options += ['-errOrdinaryLookObserve', nonce]
|
||||
if gate:
|
||||
options += ['-errOrdinaryGateObserve', nonce]
|
||||
return command + options
|
||||
|
||||
|
||||
@@ -1035,7 +1041,7 @@ def run_locked(a, steam, compat, profile, packed=None):
|
||||
run_id = uuid.uuid4().hex
|
||||
observation_nonce = run_id if getattr(a, 'observe_player_input', False) else None
|
||||
if observation_nonce:
|
||||
command = input_observer_command(command, a.project, packed, observation_nonce, getattr(a, 'exercise_relative_look', False))
|
||||
command = input_observer_command(command, a.project, packed, observation_nonce, getattr(a, 'exercise_relative_look', False), getattr(a, 'observe_prison_gate', False))
|
||||
display_context = None
|
||||
if getattr(a, 'inspect_headless_display', False):
|
||||
command, display_context = display_probe_command(command, ROOT, compat, profile, executable, run_id, os.environ.get('DISPLAY', ''))
|
||||
@@ -1205,6 +1211,7 @@ def main():
|
||||
parser.add_argument('--inspect-headless-display', action='store_true', help='Read-only ownership inspection within the hidden display; no input sent, loose Core/Chat only')
|
||||
parser.add_argument('--capture-prison-view', action='store_true', help='Opt-in single genuine local prison screenshot; loose successor source only, no camera or input changes')
|
||||
parser.add_argument('--observe-player-input', action='store_true', help='Read-only native local-input sampler; loose Core/Chat only, requires --settle >=50; sends no input')
|
||||
parser.add_argument('--observe-prison-gate', action='store_true', help='Read-only native registered prison lock/context/progress telemetry; requires --observe-player-input')
|
||||
parser.add_argument('--exercise-relative-look', action='store_true', help='Explicit tiny relative right/return mouse experiment before W/Tab; requires --exercise-player-input and native view proof')
|
||||
parser.add_argument('--exercise-player-input', action='store_true', help='Explicit bounded private W/Tab keyboard experiment; requires observer, display inspection, loose Core/Chat and settle >=50')
|
||||
parser.add_argument('--timeout', type=int, default=180)
|
||||
|
||||
Reference in New Issue
Block a user