Add rank, friends, fishing, and camp treasure with T2 studio models and skill presentation.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
udx
2026-10-21 23:01:31 +08:00
co-authored by Cursor
parent 89e0fa246f
commit 079313fb06
677 changed files with 395371 additions and 9692 deletions
+32
View File
@@ -0,0 +1,32 @@
"""Finish the four outstanding TangoFlux skill sounds, preserving actual planning seeds."""
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
import json
import numpy as np
import requests
from scipy.io import wavfile
import generate_enemy_sfx as audio
ROOT=Path(__file__).resolve().parents[1]
DESIGN=ROOT/'Doc/Design/Sound/BattleSkills/Partners'
audio.OUT=ROOT/'Tools/output/partner_skill_sfx'
audio.BUNDLE=ROOT/'AIClient/Assets/Bundles/Sound/SFX/BattleSkills'
LENGTHS={'Sfx_Heal':.55,'Sfx_Slow':.5,'Sfx_Lightning':.38,'Sfx_EnemyHit':.26}
def generate(item):return audio.generate((item['seed'],(item['id'],item['prompt'],LENGTHS[item['id']])),seed_base=0)
if __name__=='__main__':
status=requests.get(audio.BASE+'/api/status',timeout=15).json()
if not status.get('ready') or status.get('error'):raise RuntimeError('TangoFlux not ready: '+str(status))
for folder in (DESIGN,audio.OUT,audio.BUNDLE):folder.mkdir(parents=True,exist_ok=True)
path=ROOT/'Doc/Design/Sound/BattleSkills/manifest.json';manifest=json.loads(path.read_text(encoding='utf-8'))
with ThreadPoolExecutor(max_workers=2) as pool:items=list(pool.map(generate,[item for item in manifest['items'] if item['id'] in LENGTHS]))
receipt='Doc/Design/Sound/BattleSkills/Partners/generation.json'
(ROOT/receipt).write_text(json.dumps(dict(status='generated',service=audio.BASE,guide=manifest['guide'],items=items),indent=2),encoding='utf-8')
rows={item['id']:item for item in items}
for item in manifest['items']:
if item['id'] in rows:
row=rows[item['id']];item['production']=dict(output=row['output'],sha256=row['outputSha256'],receipt=receipt,scope='formal_partner_skills',actualRequest='Actual seed matches the planning seed; full request in receipt.')
manifest['status']='generated';path.write_text(json.dumps(manifest,ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
preview=[]
for item in manifest['items']:
_,data=wavfile.read(ROOT/item['production']['output']);preview.extend((data,np.zeros((13230,2),dtype=np.int16)))
wavfile.write(DESIGN/'preview_all_nine.wav',44100,np.concatenate(preview))