Add recon drones and body burial; stabilize spectator camera
This commit is contained in:
@@ -31,6 +31,8 @@ def check():
|
||||
subprocess.run([sys.executable,str(ROOT/'tests/test_attack_coordination.py')],check=True)
|
||||
subprocess.run([sys.executable,str(ROOT/'tests/test_convoy_hunt.py')],check=True)
|
||||
subprocess.run([sys.executable,str(ROOT/'tests/test_recon_search.py')],check=True)
|
||||
subprocess.run([sys.executable,str(ROOT/'tests/test_drone_recon.py')],check=True)
|
||||
subprocess.run([sys.executable,str(ROOT/'tests/test_body_burial.py')],check=True)
|
||||
subprocess.run([sys.executable,str(ROOT/'tests/test_body_recovery_selection.py')],check=True)
|
||||
subprocess.run([sys.executable,str(ROOT/'tests/test_terrain_editor.py')],check=True)
|
||||
subprocess.run([sys.executable,str(ROOT/'tests/test_terrain_editor_registration.py')],check=True)
|
||||
|
||||
@@ -60,8 +60,8 @@ def packed_input_files(folder):
|
||||
require(path.is_file() and not path.is_symlink(),'External packed input must be a flat regular file: '+str(path))
|
||||
name=path.name
|
||||
runtime=name in {'addon.gproj','resourceDatabase.rdb'} or re.fullmatch(r'[A-Za-z0-9_.-]+\.pak',name)
|
||||
media=name=='thumbnail.png' or re.fullmatch(r'gallery[0-9]+_[0-9]+x[0-9]+\.(?:jpg|png)',name)
|
||||
sidecar=re.fullmatch(r'(?:addon\.gproj|resourceDatabase\.rdb|[A-Za-z0-9_.-]+\.pak|thumbnail\.png|gallery[0-9]+_[0-9]+x[0-9]+\.(?:jpg|png))_[0-9]+(?:\.[0-9]+)*_manifest\.json',name)
|
||||
media=name=='thumbnail.png' or re.fullmatch(r'(?:gallery|preview)[0-9]+_[0-9]+x[0-9]+\.(?:jpg|png)',name)
|
||||
sidecar=re.fullmatch(r'(?:addon\.gproj|resourceDatabase\.rdb|[A-Za-z0-9_.-]+\.pak|thumbnail\.png|(?:gallery|preview)[0-9]+_[0-9]+x[0-9]+\.(?:jpg|png))_[0-9]+(?:\.[0-9]+)*_manifest\.json',name)
|
||||
require(runtime or media or sidecar or name in {'meta','ServerData.json'},'Unreviewed external packed input: '+str(path))
|
||||
files.append(path)
|
||||
require(any(path.suffix=='.pak' for path in files),'Missing runtime PAK: '+str(folder))
|
||||
|
||||
@@ -5,6 +5,8 @@ from pathlib import Path
|
||||
SCHEMA={
|
||||
'aiDoctrine':(0,0,1),
|
||||
'aiShadow':(0,0,1),
|
||||
'droneReconCount':(0,0,3),
|
||||
'droneCooldownSeconds':(300,60,1800),
|
||||
'planeAltitudeMetres':(250,150,500),
|
||||
'planeReplacementSeconds':(60,30,1800),
|
||||
'planeSectorSeconds':(120,30,600),
|
||||
@@ -35,7 +37,7 @@ SCHEMA={
|
||||
'convoyCount':(3,0,20),
|
||||
'heliTimerMinutes':(15,1,1440),
|
||||
}
|
||||
AI_KEYS=('aiDoctrine','aiShadow','planeAltitudeMetres','planeReplacementSeconds','planeSectorSeconds','planeReconEnabled','reportIntervalSeconds','supportSquadLimit','responseRadiusMetres','automaticEquipmentChancePercent','antiAirChancePercent','antiPersonnelMineChancePercent','automaticConvoyEnabled','heliTimerMinutes')
|
||||
AI_KEYS=('droneReconCount','droneCooldownSeconds','aiDoctrine','aiShadow','planeAltitudeMetres','planeReplacementSeconds','planeSectorSeconds','planeReconEnabled','reportIntervalSeconds','supportSquadLimit','responseRadiusMetres','automaticEquipmentChancePercent','antiAirChancePercent','antiPersonnelMineChancePercent','automaticConvoyEnabled','heliTimerMinutes')
|
||||
INTEL_KEYS=('aiIntelChancePercent','intelRevealChancePercent','showAllSites')
|
||||
def merge(ai=None,intel=None):
|
||||
result={key:spec[0] for key,spec in SCHEMA.items()};deferred=[]
|
||||
|
||||
@@ -23,6 +23,9 @@ from release_check import audit, read_json, evidence_path
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
BASE = '58D0FB3206B6F859'
|
||||
PROJECTS = {'core': ('ERR_Core', '2528466DE220D91C', ())}
|
||||
# Minimal inherited character action patch, scoped at runtime to Escape. This
|
||||
# exact GUID/path/owner is intentional; other vanilla identity reuse stays denied.
|
||||
VANILLA_OVERRIDES = {'37578B1666981FCE': ('Prefabs/Characters/Core/Character_Base.et', 'core')}
|
||||
|
||||
DIRECTORIES = {'Scripts', 'Prefabs', 'Configs', 'Missions', 'Worlds', 'UI', 'Materials', 'AI'}
|
||||
SUFFIXES = {'.c', '.et', '.conf', '.ent', '.layer', '.layout', '.emat', '.bt', '.meta', '.gproj', '.imageset', '.png', '.edds'}
|
||||
@@ -153,8 +156,9 @@ def validate(payload, root):
|
||||
raise ValueError(f'duplicate resource identity: {name}')
|
||||
resources[m[1]] = (m[2], owner)
|
||||
vanilla = read_json(evidence_path(root, 'docs/vanilla-resources.json'))
|
||||
if set(resources) & set(vanilla.values()):
|
||||
raise ValueError('successor resource reuses a vanilla identity')
|
||||
for guid in set(resources) & set(vanilla.values()):
|
||||
if resources[guid] != VANILLA_OVERRIDES.get(guid):
|
||||
raise ValueError('successor resource reuses a vanilla identity')
|
||||
for name, data in payload.items():
|
||||
suffix = PurePosixPath(name).suffix
|
||||
if suffix == '.meta':
|
||||
|
||||
Reference in New Issue
Block a user