diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9c2472f7..4a65c9a6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: python-version: '3.13' - name: Install setup packager run: python -m pip install pyinstaller==6.19.0 numpy==2.2.6 Pillow==11.3.0 - - name: Build source-only release + - name: Build Windows package shell: pwsh run: ./Build-Release.ps1 - uses: actions/upload-artifact@v4 diff --git a/Build-Release.ps1 b/Build-Release.ps1 index c2937975..bd9b6154 100644 --- a/Build-Release.ps1 +++ b/Build-Release.ps1 @@ -1,5 +1,6 @@ param() $ErrorActionPreference = 'Stop' +throw 'Release packaging is paused until the Blender-free ISO converter is ready.' Push-Location $PSScriptRoot try { $packagePython = Join-Path $PSScriptRoot 'target/package-venv/Scripts/python.exe' diff --git a/README.md b/README.md index b5df693b..db760e89 100644 --- a/README.md +++ b/README.md @@ -10,10 +10,9 @@ Includes skating, tricks, grinds, offboard movement, difficulty settings and ## Play -Download the Windows release ZIP, extract it and run `skate3rust.exe`. -Select your own Skate 3 Xbox 360 ISO when prompted. Setup prepares the skater, -animations and disc maps locally, then starts University. The first setup needs -internet access for conversion tools and can take a while. +ISO setup is under development. Release packaging is paused while the asset +converter is changed to work without Blender. Use a prepared local asset set +for now. Use an XInput controller to play. Escape opens graphics, difficulty and map settings. Loading another map restarts the game session. @@ -29,9 +28,8 @@ Use `PLAY-MAP.bat` to select a map. An XInput controller is required for gamepla Escape opens difficulty and graphics settings. Development builds use a prepared asset set in `assets/private/` or the -first-run installation above. `Build-Release.ps1` builds the portable Windows -package with its setup helper; it also requires Python 3.13. Published GitHub -releases build and attach this package automatically. +installed asset directory. The Windows release workflow is present, but +packaging is disabled until direct ISO conversion is ready. Custom animations and climbing support remain available, but no custom clips are shipped. The included format-demo map is original procedural content. diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 8f0c0e2b..b502d7c2 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -17,9 +17,10 @@ reference: https://github.com/NFSTools/VaultLib. Its lookup8 hash and record reader preserve data from the user's BIN/VLT files; no settings payload is bundled. -First-run setup downloads Blender 5.0.1 and XboxDev extract-xiso from their -publishers and verifies pinned SHA-256 hashes. Their distributions retain their -own license files. Game assets are never downloaded from this project. +Release setup is paused pending direct asset conversion. Blender is not +downloaded by setup. The retained authoring scripts can use a separately +supplied Blender executable. XboxDev extract-xiso retains its own license +files. Game assets are never downloaded from this project. The setup executable bundles Python, NumPy, Pillow, Tcl/Tk and PyInstaller's bootloader. Their license information is retained by the packager alongside diff --git a/docs/installation.md b/docs/installation.md index fc05f406..bfd5b783 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -1,5 +1,10 @@ # Windows installation +**Paused:** the Blender-based conversion approach below was rejected. The +public setup entry point and release packaging are disabled pending direct +conversion. The notes below describe the earlier implementation, not a ready +release. Setup no longer downloads Blender. + `Build-Release.ps1` produces `target/skate3rust-windows-x64.zip`. Keep its `support` directory beside `skate3rust.exe`. The game links Bevy and the MSVC runtime statically; the setup helper bundles Python, NumPy, Pillow and Tcl/Tk. diff --git a/tools/asset_pipeline/install.py b/tools/asset_pipeline/install.py index 486dfd9f..7fb50d5e 100644 --- a/tools/asset_pipeline/install.py +++ b/tools/asset_pipeline/install.py @@ -6,8 +6,6 @@ from .vlt import convert as convert_vlt from .physics_skeleton import convert as convert_skeleton TOOLS=Path(__file__).resolve().parents[1] -BLENDER_URL='https://download.blender.org/release/Blender5.0/blender-5.0.1-windows-x64.zip' -BLENDER_SHA='921d77f6c505a35b2c2f6e67d4ad1c10b72418338ba0e0d3ea7f582a5e5fe46e' XISO_URL='https://github.com/XboxDev/extract-xiso/releases/download/build-202505152050/extract-xiso-Win64_Release.zip' XISO_SHA='fec88d03c7efd6205ab09be4abba70c0afd0eb27a5709f0a6235b828ba5ac11e' @@ -53,7 +51,6 @@ def dependency(cache,name,url,sha,report): return executable def run(args,log,report): - report('Running '+Path(args[0]).name) kwargs={'creationflags':subprocess.CREATE_NO_WINDOW} if os.name=='nt' else {} external=os.name=='nt' and getattr(sys,'frozen',False) and Path(args[0]).resolve()!=Path(sys.executable).resolve() if external: @@ -74,7 +71,6 @@ def run(args,log,report): with child as process: for line in process.stdout: log.write(line);log.flush() - if line.strip():report(line.strip()[-180:]) if process.wait():raise RuntimeError('Conversion failed. See '+str(log.name)) def task(script,*args): @@ -110,6 +106,7 @@ def convert_map(archive,work,maps,stage,blender,game_exe,log,report): build_archive(manifest_path,collision) final=maps/(label+'.skate') embed_archive(raw_package,collision,final) + report('Checking converted map: '+label) run([game_exe,'--assets',stage/'assets','--map',final,'--check-assets'],log,report) entry={'name':label,'path':'maps/'+final.name,'sha256':digest(final)} remove_intermediate(district_work,work) @@ -117,6 +114,10 @@ def convert_map(archive,work,maps,stage,blender,game_exe,log,report): def install(iso,base,game_exe,report,game_root=None): + raise RuntimeError('ISO setup is paused while direct asset conversion is implemented. No Blender will be downloaded or installed.') + + +def _authoring_install(iso,base,game_exe,report,blender,game_root=None): base=base.resolve();base.mkdir(parents=True,exist_ok=True) lock=base/'setup.lock' try:fd=os.open(lock,os.O_CREAT|os.O_EXCL|os.O_WRONLY) @@ -135,6 +136,7 @@ def install(iso,base,game_exe,report,game_root=None): if not iso.is_file() or iso.suffix.lower()!='.iso':raise RuntimeError('Select an Xbox 360 Skate 3 ISO') extractor=dependency(base/'tools','extract-xiso',XISO_URL,XISO_SHA,report) game_root=work/'disc' + report('Extracting your ISO') run([extractor,'-x',iso,'-d',game_root],log,report) else:game_root=game_root.resolve() for required in ['default.xex','data/big/miscload.big','data/big/miscboot.big','data/big/db.big', @@ -166,9 +168,7 @@ def install(iso,base,game_exe,report,game_root=None): character=work/'character' run(task(TOOLS/'extract_default_skater.py','--owned-data-root',stock,'--work-root',character, '--private-root',private/'default_skater','--utt-root',TOOLS/'vendor/utt'),log,report) - # Blender is a portable conversion dependency, downloaded from its - # publisher and hash checked. It is never installed system-wide. - blender=dependency(base/'tools','blender',BLENDER_URL,BLENDER_SHA,report) + report('Building the skater model and rig') blend=character/'skater.blend' run([blender,'--background','--factory-startup','--python-exit-code','1', '--python',TOOLS/'vendor/skate3_anim/blender_rx2_abin_export.py','--',