FF8CG文件格式和跳CG解决方法

2003-06-12 16:41 | bsp

有鉴于绝大多数玩家(这么说不过分吧^-^)的FF8盘都有跳CG问题,希望能从CG文件的格式入手,找到
一个一劳永逸的解决方法.
声明:本文只讨论PC版的光盘文件,PS版的FF8.IMG偶还没有搞清楚-_-b.


1.pak和bik文件的格式(对修改苦手的玩家完全可以跳过这部分)
FF8的CG文件(.pak)打包存放在4张光盘的disc1.pak到disc4.pak文件中,将它们拷贝到硬盘上再用
十六进制编辑器打开(我用的是UltraEdit,WinHex也可以),文件个头较大,耐心等一会.当然直接从光盘
打开也可以,尤其是拷贝不过去的时候.


十六进制编辑基本知识(高手跳过):文件内容按地址分字节存放,低位在前,高位在后,如12h,3fh,67h
代表673f12h=6766354d(h结尾表示十六进制数,d结尾表示十进制数).


.pak文件的结构很有规律,3个文件一组,一组一组排列:一个.bik文件的索引文件和.bik文件A和B
(分别是一段CG的高低分辨率版本).见下图:


索引文件:
前3个字节是文件的标志,依次是46h,38h,50h,ASCII码是F8P.
下3个字节为??h,00h,00h,作用不明(??表示不定,通常为f7h).
下2个字节(不妨定义为length,下面多处用到)是接下来连续几长段字节的个数-1(比如disc1.pak中这
里是45h,01h也就是length=145h=325d).
连续的length+1个段字节:作用不明(与接下来的两个.bik文件密切相关),每段44d(2ch)个字节(比如
disc1.pak这里就是146h=326d个段),段尾的3个字节固定为45h,4eh,44h(ASCII:END).


.bik文件:
由于没有明确的偏移地址指向它俩(.bik文件A和B),起始位置可以通过计算得到(比如disc1.pak的第
一个.bik文件,也就是学园的高分辨率CG的起始地址=8h+146h*2ch=3810h).
FF8的CG是标准的bik文件格式,而且没有压缩(接下来的叙述都是用.bik文件的地址作起始地址,用软
件提取出来看更清楚省劲一些).
.bik文件头由56个字节组成:
前4个字节是文件的标志,依次是42h,49h,4bh,66h,ASCII码是BIKf.
下4个字节是文件的长度,不过不包括这前8个字节.
下4个字节是采样(sample)的个数,共计length+1个.
下4个字节作用不明.
下4个字节仍然是采样个数.
下4个字节是视频图象的宽度,高分辨率是80h,02h,00h,00h(280h=640d),低分辨率是40h,01h,00h,00h(140h=320d).
下4个字节是视频图象的高度,高分辨率是c0h,01h,00h,00h(1c0h=448d),低分辨率e0h,00h,00h,00h(e0h=224d).
(注意并不是480和240,这就解释了为什么游戏截图的上下各有16个或8个象素高的黑边).
下4个字节是每秒的帧数(FF8的CG固定为0fh,00h,00h,00h,15帧/秒).
下16个字节固定为01h,00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,00h,1ch,02h,00h,作用不明.
下2个字节是声音的采样率,固定为44h,ach(ac44h=44100d,是不是有点眼熟啊).
最后6个字节固定为00h,e0h,00h,00h,00h,00h,作用不明.
接下来是采样的偏移地址表,偏移地址的个数为length+1个,表中每个偏移地址占4个字节,注意是.bik
文件内的偏移地址而不是.pak文件的,由于没有长度信息,每个采样的长度就由两个偏移地址之间的差值给
出.
最后就是这一大堆采样了,每个的位置都由上面的偏移地址表指定,一般最后一个偏移地址指向.bik文
件的末尾.采样的内容就没什么好说的了,太长,而且看不懂.*_*
一组里的.bik文件A与.bik文件B内容几乎一样(比如采样个数,每秒帧数等),不同在文件长度,图象宽
度和高度上,当然那一堆采样还是差别很大DI.


2.跳CG的解决方法
由上面的分析可以知道(没有人被偶讲晕吧^-^),每个.bik文件都是由"BIKf"开头的,所以只要查找字
符串"BIKf",再把两个串之间的部分拉出来成一个新文件,改一下扩展名就行了(索引文件完全可以忽略,事
实上提取CG的软件Mrip就是这个原理),由于文件太大,就用Mrip代劳好了,本站下载区里有.


我构想的解决方法很简单:请CG不跳的网友把提取出的CG片段放到网上,然后检查一下你的哪段CG跳出
就下载对应的那段再写回.pak文件就行了
,这样不用一次下载整个.pak文件,节省不少时间.


最后就是写入的问题,这个在十六进制编辑器里简单的复制粘贴就可以完成,当然也可以用程序写入,
关键是对应的CG在.pak文件中的位置,为了方便,我把每段CG的名称(这里用的是Qhimm的FF8FMV里的名称)
和在.pak文件中的偏移地址(十六进制)列在下面(已经过校验,理论正确):

CG名称索引文件
偏移地址
bik A
偏移地址
bik B
偏移地址
disc1
Balamb Garden038105818a4
Quistis Trepe7e39607e5b9cb4de60
Zell Dinchtcc18e8cc349cf704ac
Destination: Dollet10c8b4c10d48642392dd8
Selphie Tilmitt2bc5d1c2bc82182f62b9c
The Comm. Tower30f06ac30fc62c441eb6c
X-ATM092 and a Car4ca15504ca1c644d5a9d8
Escape from Dollet4daf63c4dbb0946083a4c
A Shooting Star68f59d068f91886d7d954
Dancing with Rinoa6f77cb46f86bd086961d4
Speeding Train90618109065ba49742850
A Stolen Wagon9a5fd5c9a64d50a27f298
(Static Transition)a62a3c0a62ab84a6e252c
(Tilted Camera)a72bcd0a72bf6ca768f28
Galbadia Gardena7815bca7853a4ad98458
Irvine Kinneasb03c618b03f9b0b53e264
Deling Cityb7604a4b761e74ba07d00
Sorceress Edeabb3f834bb49134ca60450
Edea's Speechd21c860d21e93cd5658d8
Huuuge Crowdd7164dcd7179b0d925d50
Lively Statuesda0c6e8da10bdce0e0800
Edea's Paradee3dd548e3e63ccf2305a0
More of the Paradef89ec2cf8a0470fb1766c
Seifer Looking Happyfc3646cfc3c2fc105c24a4
20:00... It's time10a09a6410a0fd4011404fe4
Trapped!
1187e8581187feb811ad3598
Take the Shot!
11be9bc411bead2811da0768
Squall Steals a Car11e5fa4011e62ee0123b3e88
The Sorceress' Knight1261998c1261e3d412d68684
Edea's Magic13093db01309bea013d80110
Opening (Liberi Fatali)1433ccd01435bec4172f2108
Disc 2
Prison Elevator04de47c5710
Desert Prisonb33d14b36ce4fdbac4
Hazardous Bridge11d2aa011d63601785e7c
Now That's a Drill1a0fe981a14bf821ed4e4
Missile Launch257aab0257c7982861b18
Self Destruct29acca429af2502d87fd0
(Just the 'Boom')2f4a2282f4b4103119aac
More Missiles31ea28831ebe1034b2304
Target Acquired35f1dd835f5f5c3c937a8
Shelter Mechanism3f8ecf43f913d4438d11c
Garden Transformed45615004565c884ca6594
Missiles Inbound4fef4784ff5c245a6ed20
It's a Hit!5f279905f2b32c650e57c
No Longer in Danger67bf98c67c3b106e4a7e0
Rinoa in the Wind712f39c7134ee87a43d7c
Close Call7e427f07e43c988062d70
Garden put to Sea815cf0c815e8b083fef90
Drifting Away85339dc85353ac87cdda8
White SeeD Ship88f822088fadfc8d6bc7c
Crashing into FH8f6e2188f72bb096ed220
Fisherman's Horizon9a529609a543309cdf81c
Galbadia's Coming9dfcb109dfd7fc9f52678
Through the Woods9ff03109ff17b8a1fa290
Seifer Againa2ddd50a2e0e54a7cdad0
Motorcycles...?aa02a88aa06348afd3af8
Rinoa's in Troubleb27b874b27ec0cb7a8510
Galbadia Passes byb9f5854b9f6cfcbc0b104
They're Turningbcfa5f4bcfb2e0be43af0
Head-on Collisionbed5114bed65bcc0eab5c
Jetpacksc1da1d0c1e18c8cdc0d04
Another Collisiond306a80d307f28d51fce4
Payback Timed612a70d6141acd871bc8
Escape Hatchd985c60d98949cdf2a380
Saving Rinoae1abf80e1b8b60f60a380
Disc 3
De-cloaking Esthar021e437b0d4
Speed-lifts512f9c5180c4cef670
Leaving the City107cdb4107dfc8125f030
Entering the City133f88c1340aa0151ee94
Leaving the Palace15fce8015fe0c017caf10
Entering the Palace189500418962441a62d90
Taking the Elevator1b2cc381b2df281d184f8
Lunar Gate1df61f41df958c22ee308
Leaving the Planet251fad825207c42665738
Lunar Base26f34ac26fb1d43364b54
Lunar Monsters38dccc838de1703af7998
Closer Look3bec2603bef88c415ebc4
Lunatic Pandora43cce5043cf53047b2f08
Tear's Point496ed00497560c53dee7c
The Probe Destroyed5871428587263c5a482b8
Adel Swallowed5b1dc385b208145f71794
Escape Pod61604846162c98656ff94
Running Out of Air674455467454d468d2e58
No Time Left6984c146985b946b0fc68
Ran Out of Air6bbe1846bbfd646e5b4e0
The Rings6f7f27c6f821c8742f7e0
Backup System763d76876407907a8e930
More Lunar Cry7c73e747c74df47e07dc4
What's That?7ebf2587ec14c08226068
The Ragnarok83a27ac83a8ed48dc1404
Open the Hatch9220bc492210f492a9c3c
Break the Seal92e87c492ece449a0f044
Attacking Pandora9d4d9209d4ef809f9eb80
Shipping Off Adela0b1154a0b51fca7435a8
Breaching Pandoraaa3ba38aa3fe24b132368
Adel Enters Pandorab460330b466ea4bf18340
The Lunar Cryc3d389cc3de3a8d4fedf0
Disc 4
Adel Seizes Rinoa043106c3f84
Time Compression9cba809d93181f828a0
Ultimecia Castle2927b9c292aca02e08b94
Ultimecia Herself302e8903030f443411520
Ending (1st half)35cc69835fb1f07dc4b0c
Final Credits9cc83d89ce92acb7a47a8
Ending + Creditsc602654c64e92013cdf734

用程序来做这些事更省心,点这里下载(很简单的小玩意,源代码就不帖了).
有些玩家的光盘可能是坏的,拷贝的过程中就会报错,而且直接打开看到的内容也不全(我的disc2就是
),这时可以用软件把文件提取出来,我用的是IsoBuster,其他的如WinIso只要好用就行.


3.用BinkPlay.exe播放CG
BinkPlay本站有下,把.bik文件拖到它上面就可以了.不过这样用的是默认的参数,要自定参数的话在
命令行或快捷方式里输入,以下是参数的意义(时间很仓促,翻译肯定有错误的地方^-^):
格式:BinkPlay <文件1 文件2 ...> [/参数]:
/P 将整个Bink视频预读入内存
/L## 循环播放动画##次(无限次:只用/L)
/F#.# 使用指定帧数(快速播放:只用/F)
/T## 播放指定音轨
/S 播放结束后显示回放摘要
/X## 指定回放的X轴坐标
/Y## 指定回放的Y轴坐标
/W#.# 拉伸象素至指定宽度(可能拖慢),使用负数作缩放比例
(例:2倍,'/W-2';全屏,'/W-1')
/H#.# 拉伸象素至指定高度(可能拖慢)
/R 用黑色背景填充屏幕
/C 在Bink窗口中隐藏鼠标
/M##
模拟指定读取速度(字节/秒)
/E## 指定读取缓冲所用内存量
/G
打开Bink时不使用读取缓冲(更快打开)
/K 禁用多线程设备读取
/U##
禁用下列控制键:1=暂停,2=跳过,4=退出
/N 落后也不使用跳帧
/A##
显示选项:1=2倍高度,2=2倍高度隔行扫描,3=2倍宽度
4=2倍高宽隔行扫描,5=2倍高宽,
6=1倍高度隔行扫描,7=禁用全部
/Q 显示运行回放统计
/I# 窗口风格:0=标准,1=无标题,2=无.+100:总在最前
/J 失去焦点不暂停播放
/D## 显示分辨率:1=320x200,2=320x240,3=320x400,
4=400x300,5=480x360,6=512x384,7=640x400
8=640x480,9=800x600,10=960x720,11=1024x768,
12=1152x864,13=1280x1024.设定色深,+0:16位,
+100:24位,+200:32位,+300:8位
/B## 双线过滤风格:0=自动,1=使用DirectDraw主
显示(最 佳画质,最快),2=DIB段(最佳画质,最好兼容性),
3=YV12覆载,4=YUY2覆载,5=UYVY覆载,6=YV12直接写屏,
7=YUY12直接写屏,8=UYVY直接写屏,9=DirectDrawRGB
显存直接写屏,10=DirectDrawRGB内存直接写屏

用几个常用的就行了,FF8FMV用的参数是"/D108 /R /C"和"/D102 /R /C".


-

Kweh!!Kweehhhh!!