// pvfprobe910 确认 origin_cinematic_10..13 的池字符串确实可用(被 townmovielist 引用), // 并打印 scene.etc 里所有影片块的位置、段号与池引用。 package main import ( "encoding/binary" "flag" "fmt" platformpvf "longheng.io/server/internal/platform/pvf" ) func u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) } func main() { input := flag.String("pvf", "", "input PVF") flag.Parse() archive, err := platformpvf.Open(*input) if err != nil { panic(err) } scene, _ := archive.ReadRaw("etc/storydigest/scene.etc") toks := len(scene) / 5 fmt.Printf("scene.etc %d 字节 %d 令牌\n", len(scene), toks) // 全部影片块 fmt.Println("\n=== 影片块([scene] int 空串 视频)===") var segs []uint32 for i := 0; i+3 < toks; i++ { if scene[i*5] != 3 || u32(scene[i*5+1:i*5+5]) != 0x025138C6 { continue } if scene[(i+1)*5] != 0 || scene[(i+2)*5] != 6 { continue } if u32(scene[(i+2)*5+1:(i+2)*5+5]) != 0x00000B04 { continue } if scene[(i+3)*5] != 3 { continue } num := u32(scene[(i+1)*5+1 : (i+1)*5+5]) ref := u32(scene[(i+3)*5+1 : (i+3)*5+5]) fmt.Printf(" token#%-4d 段号=%-5d videoRef=0x%08X\n", i, num, ref) segs = append(segs, num) } fmt.Printf("共 %d 个影片块,段号: %v\n", len(segs), segs) // 确认 10..13 的池引用在 townmovielist 里 fmt.Println("\n=== townmovielist.etc 里的池引用(候选 10..13)===") tm, _ := archive.ReadRaw("etc/townmovielist.etc") tt := len(tm) / 5 for i := 0; i < tt; i++ { if tm[i*5] != 6 { continue } ref := u32(tm[i*5+1 : i*5+5]) if ref >= 0x0349D000 && ref <= 0x0349E000 { fmt.Printf(" token#%-4d ref=0x%08X <-- 候选\n", i, ref) } } }