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,6 +10,8 @@ ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(ROOT/'tools'))
|
||||
import headless_game as packed
|
||||
import source_bundle as bundle
|
||||
import packed_external as merged
|
||||
from external_addons import DIRECT
|
||||
from project_schema import parse_project
|
||||
|
||||
CURRENT = (ROOT/'addons/core/addon.gproj').read_text()
|
||||
@@ -46,8 +48,11 @@ class ProjectSchemaTests(unittest.TestCase):
|
||||
match = parse_project(text, allow_core_menu=True)
|
||||
self.assertIsNotNone(match)
|
||||
self.assertEqual(match.group(1, 2), ('ERR_Core', packed.PACKED_GUID))
|
||||
self.assertEqual(set(self.packed(text)), packed.PACKED_FILES)
|
||||
self.assertEqual(self.source(text)['core']['dependencies'], [packed.PACKED_BASE])
|
||||
legacy_text = text
|
||||
for guid in DIRECT: legacy_text = legacy_text.replace('\"'+guid+'\"', '')
|
||||
self.assertEqual(set(self.packed(legacy_text)), packed.PACKED_FILES)
|
||||
with self.assertRaises(ValueError): self.packed(text)
|
||||
self.assertEqual(set(self.source(text)['core']['dependencies']), {packed.PACKED_BASE, *DIRECT})
|
||||
self.assertIsNotNone(parse_project(MINIMAL))
|
||||
self.assertIsNone(parse_project(CURRENT))
|
||||
|
||||
@@ -88,16 +93,15 @@ class ProjectSchemaTests(unittest.TestCase):
|
||||
with self.assertRaises(ValueError): self.packed(text)
|
||||
with self.assertRaisesRegex(ValueError, 'identity/dependency'): self.source(text)
|
||||
|
||||
def test_extension_is_core_only(self):
|
||||
for name, (identity, guid, deps) in packed.PACKED_PROJECTS.items():
|
||||
if name == 'core': continue
|
||||
text = (ROOT/'addons'/name/'addon.gproj').read_text()
|
||||
text = text[:text.rindex('}')]+MENU+'}\n'
|
||||
with self.subTest(project=name):
|
||||
with self.assertRaises(ValueError): self.packed(text, name)
|
||||
payload = dict(self.payload)
|
||||
payload['addons/'+name+'/addon.gproj'] = text.encode()
|
||||
with self.assertRaisesRegex(ValueError, 'identity/dependency'): bundle.validate(payload, ROOT)
|
||||
def test_merged_packed_menu_extension(self):
|
||||
folder = self.candidate/'core'
|
||||
folder.mkdir()
|
||||
for name in ('data.pak', 'resourceDatabase.rdb'):
|
||||
(self.candidate/name).rename(folder/name)
|
||||
(folder/'addon.gproj').write_text(CURRENT)
|
||||
self.assertEqual(set(merged.inventory(self.candidate)), {'core/'+name for name in merged.FILES})
|
||||
(folder/'addon.gproj').write_text(CURRENT.replace('Configs/ERR/AdminMenus.conf', 'Configs/Foreign/Menu.conf'))
|
||||
with self.assertRaises(ValueError): merged.inventory(self.candidate)
|
||||
|
||||
def test_source_menu_reference_must_resolve_to_its_owned_resource(self):
|
||||
payload = dict(self.payload)
|
||||
|
||||
Reference in New Issue
Block a user