【简介】SFB封包是轩五三部曲、仙剑OL、天之痕OL等音乐资源封包的封包格式,若要进行MOD开发,对音乐进行编辑、添加是必不可少的,因此本工具便提供了这项功能
【功能】
·支持SFB文件解包
·支持SFB内部文件替换
·支持SFB内部文件追加(用于MOD制作)
·支持SFB内部文件删除(用于MOD卸载)
【下载】点击下载
【源代码】读取部分(Delphi v7.0编写)
{
—————————————————–
SFB Editor(轩辕剑游戏音乐封包文件编辑器)Code By Mayafei
Delphi v7.0程序下载请到: http://mayafei263.ys168.com/ (轩辕剑MOD相关SFB_Editor.rar)
说明:
Form1.Result是程式中的ListView
Form1.Memo是程式中的Memo
全局变量Anainfo是传递给本函数是否Memo显示信息的参数,类型是boolean
全局变量FileTypeA是传递给本函数是否分析文件类型,类型是boolean—————————————————–
}var
SFB_Stream, FTyp_Stream: TFileStream;
offset, i: integer;
fx_temp: integer;begin
Form1.Result.Clear;
if AnaInfo=true then Form1.Memo.Lines.Add(#13#10+’开始分析SFB文件:’+Form1.SFBFile.Text);
if FileExists(Form1.SFBFile.Text) then
begin
SFB_Stream:=TFileStream.Create(Form1.SFBFile.Text, fmShareDenyNone);
if FileTypeA=true then FTyp_Stream:=TFileStream.Create(Form1.SFBFile.Text, fmShareDenyNone);
SFB_Stream.Position:=0;
SFB_Stream.Read(File_Def[1],4);
if AnaInfo=true then Form1.Memo.Lines.Add(‘获取SFB内部文件大小定义(1):’+inttostr(File_Def[1]));
SFB_Stream.Seek(File_Def[1], soFromBeginning);
SFB_Stream.Read(File_Def[2],4);
if AnaInfo=true then Form1.Memo.Lines.Add(‘获取SFB内部文件当前数量:’+inttostr(File_Def[2]));
SFB_Stream.Read(File_Def[3],4);
if AnaInfo=true then Form1.Memo.Lines.Add(‘获取SFB内部文件大小定义(2):’+inttostr(File_Def[3]));
SFB_Stream.Seek(File_Def[3], soFromBeginning);
//SFB整个文件定义读取完毕,获取内部每个文件定义开始
if AnaInfo=true then Form1.Memo.Lines.Add(‘正在获取每个文件信息…’);
for i:=1 to File_Def[2] do
begin
SFB_Stream.Read(offset,4);
with Form1.Result.items.add do
begin
caption:=inttostr((i-1));
offset:=offset+4;//ListView中显示真实的文件起始偏移量
subitems.add(inttostr(offset));
if FileTypeA=true then
begin
FTyp_Stream.Seek(offset, soFromBeginning);
FTyp_Stream.Read(fx_temp,1);
//subitems.add(inttostr(fx_temp));
if fx_temp=82 then subitems.add(‘WAV’)
else if fx_temp=73 then subitems.add(‘MP3′)
else if fx_temp>253 then subitems.add(‘MP3′)
else subitems.add(‘未知’);
end
else
subitems.add(‘N/A’);
end;
end;
if AnaInfo=true then Form1.Memo.Lines.Add(‘SFB文件分析完成!’);
FreeAndNil(FTyp_Stream);
FreeAndNil(SFB_Stream);
Form1.TakeupA.Enabled:=True;
Form1.DeleteF.Enabled:=True;
end
else
Form1.Memo.Lines.Add(‘错误:文件不存在!!!’);
end;