冒险解谜游戏中文网 ChinaAVG

标题: 金发美女的懒汉打包工具(scgame请进) [打印本页]

作者: shane007    时间: 2010-4-13 23:40
标题: 金发美女的懒汉打包工具(scgame请进)
scgame8 W- E5 l( R4 D8 [! u

2 c7 N/ p8 M. i* g7 g5 \( U4 r8 V你好,请在完成前一个小任务以后,抽时间完成一下这个金发美女的懒汉打包工具。
- @' ?6 W+ b, i% a请先看一下下面这个帖子* O5 Z: ]9 u/ Q2 Q8 X% y, e
【神秘岛4汉化项目】懒汉式打包新方法 : Y; P7 m+ O( Y9 ~" Q0 ]
https://www.chinaavg.com/read.php?tid=19892&keyword=%C0%C1%BA%BA
1 E8 C: C+ |2 }5 R1 w相关帖子
' t9 g( f  P& t+ j0 k$ o& ?7 U  Y金发美女正式版的解包和打包工具
( B  y  Z1 r$ fhttps://www.chinaavg.com/read.php?tid=21364 " |1 R' \( j9 r6 |2 b& a2 n( Y
细节大致如下# Y) H* _0 u9 }
.TOC 存放了SIZE和OFFSET,.DIR存放了文件名OFFSET和文件名。6 H/ e' L7 r6 f) S# {( S
工具大致用法如下' v& B. T4 I+ s( ^. w' G1 |
pack.exe filelist.txt foldername6 F. g0 c6 Y8 L3 W" _0 D# N3 E  c: W
filelist.txt里存放了修改后的文件列表,foldername是修改后的文件保存目录。
9 D/ D  F4 B4 l2 u( X# X  ?8 Apack.exe把文件列表的文件逐个加入到.DAT的尾部,并修改.TOC,.DIR,使游戏找到我们修改后的文件。
作者: scgame    时间: 2010-4-13 23:56
先去下个看看
作者: scgame    时间: 2010-4-20 01:17
.DIR和.TOC的格式不是很明白
( k0 X1 T; |& G. B: @4 E  _是怎么对应SOBLOND.DAT的啊) _9 o( s2 v5 c& w+ r, l, Z0 C% u
能不能再详细得说一下这两个文件是怎么表示offset,和size的吗
! p6 A- ?  a# L! V- y我现在在想的步骤是:  o4 d( d* U! N: c
1) 从DIR里读取文件名,获取他们的索引(1,2,3,4....)
2 I3 p9 q$ R8 x" l2) 再通过索引和文件名和filelist.txt对比找到相应的.TOC和.DIR数据修改6 i" `9 P& d: ^9 k7 k+ _
3) 写入.dat+ `8 k! I4 U9 s4 I$ E

. P% @' O/ x8 N0 G嗯,不过还是请解释一下.DIR和.TOC
0 a1 H+ b4 |, _# w我可以先写个读取文件名找索引的,然后和file.txt比较然后再来写入
作者: shane007    时间: 2010-4-20 07:58
open FDDE DIR 1
( b/ s. B" F0 ?* Yopen FDDE TOC 2
* P2 T" M3 z2 F1 R/ ddo   f: s5 O8 R5 b  M
    getdstring CHUNK 4 2# r8 ]  j0 s5 @' w( I
    get DUNNO long 24 b% k# z3 x/ S* [9 G" O. {9 y. {
    get DUNNO long 2
, L6 c' V0 {' A; s    get FILES long 2# X) @7 v* I6 R) m4 @. D
    get DUNNO long 2! m1 ]; n2 P. U. J( j
    get DUNNO long 2* E7 `% _1 V' N
    get DUNNO long 2
0 H6 ~- D. W. x; k8 z2 R    get DUNNO long 2# g9 {* ~( Q: O+ r2 S
while CHUNK != "REST"% k2 g6 X  e8 M+ a) @/ h
savepos NAMEPTR 1; D( \5 z5 J/ G9 U$ J3 X8 b7 O
for i = 1 to FILES( ]: I0 O; M1 ?3 q; a
    get DUNNO long 2' x8 k) H8 t/ f0 I1 Z5 k
    get SIZE long 2+ d- k; ?+ U. {
    math SIZE >>= 2! y1 p: R# C8 l, v" C8 Z
    get OFFSET long 2
4 Z7 x  I- b& u3 l    goto NAMEPTR 1
/ X( v+ m# G% u% g- m% N    get NAMEOFF long 1, F! H  K* U- A
    savepos NAMEPTR 1
, Y8 Q& |: R- A% |0 q    goto NAMEOFF 1" R9 x4 m1 _9 h
    get NAME string 1
$ F$ e5 x6 d, M* \    log NAME OFFSET SIZE
+ t1 W2 ?3 I- N$ r6 U! tnext i
6 l/ r9 M( I% |! r' v. g5 }0 X- ]. l2 @8 D3 A
% v4 c. D1 [0 R: t6 \- L5 s2 z
这是解包器
- e1 F& e1 _8 r+ b( ^) G5 `4 D0 p- R+ f1 V
for 里面读取toc的部分,long就是4个字节9 a" k/ q/ i1 U* B! N$ I4 c
  get DUNNO long 2+ q% B5 w3 x+ I4 m" c( G
    get SIZE long 2
) E& D2 g  n) S  t    math SIZE >>= 2
2 Q; b" R, F# H- ^    get OFFSET long 2
6 C; R% X5 V2 Q4 }/ B$ e$ h* K6 W  l! V6 k4 X0 C
for 里面读取dir的部分,long就是4个字节0 A. {) W( s, C
    goto NAMEPTR 1
; m/ F' O9 K" `7 E    get NAMEOFF long 1' i) i* _5 D( {$ W3 [
    savepos NAMEPTR 10 w% j5 _4 f" F7 E2 @4 P: D
    goto NAMEOFF 1
' D. r( Q% p2 R    get NAME string 1
作者: shane007    时间: 2010-4-20 07:59
不明白的地方请继续提问。
作者: scgame    时间: 2010-4-20 10:47
这4个字节是Big Endian 还是Small Endian的啊
作者: scgame    时间: 2010-4-20 10:51
哦,上面一段是写包?
作者: shane007    时间: 2010-4-20 11:19
我来详细解释一下,
" ~! J- Y; M) D! K7 qopen FDDE DIR 1 . ?+ A- K% T& B* P  f1 R: i8 i
open FDDE TOC 2
, N  [6 {/ Y( u4 p; O' i0 @相当于打开2个文件,后面的1,2相当于句柄  d: U3 C9 w  s# L; E, w

1 q1 V5 ]1 y! Q( kdo  o9 u! J3 `% d9 e
    getdstring CHUNK 4 27 l8 @8 d; W5 i1 u# ^# A* @
    get DUNNO long 2
9 @) x+ D  D  G" }    get DUNNO long 2  / f  h1 W  n: J/ z
    get FILES long 2 6 h1 \: N3 T* s- y$ r0 O
    get DUNNO long 2
' D2 d1 m2 ?, E& X2 D( A; c7 \    get DUNNO long 2
$ W2 P- f5 t" F) G' f, o    get DUNNO long 2 . ]3 z( O2 r( g1 b1 w
    get DUNNO long 2   v& o/ ^! R. q) p- F% v
while CHUNK != "REST"8 }) ]/ {4 z! o" a8 h2 c

* J7 d$ F/ V: M! W! s3 K/ s" L* `; f这段主要是打开TOC ,读取文件数FILES 。0 H8 q) l7 h: {  \5 ~$ h
你算算FILES 就能分析出是BE还是LE的。
5 L$ N" A2 p9 V' c' A
; V4 A8 Y4 Z$ ~2 {' T) x- e后面2段是7 K: I6 a3 M, Y" _
读取toc里面的每个文件的SIZE ,offset. V  U6 X+ m2 J' J8 @, O
读取dir里面的每个文件的NAMEOFF ,NAME
( v5 ~# l( x' C0 k最后根据每个文件的SIZE ,offset,NAME到dat里面把每个文件切出来。4 d6 I8 A, o3 |& |

. j3 A1 L2 ]& U% J该明白了吧?
作者: warwar    时间: 2011-5-29 19:20
mark




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2