This is a really good example of the simplest archive format possible.
/ Y4 [" y# h2 M1 U& _% D0 p& X- _; ?) p) u; `. a" V
The archive begins with a 4 byte signature 'PFPK'.
: W5 O1 G' \' Z5 U1 ZImmediately after that is an 32 bit integer telling you how many files are in the archive. % L2 b1 K" r7 L4 y: z
6 _: [/ B4 p2 q, L& j& K6 L
Then it starts the file allocation table. - ]6 X) X a+ _ g
Each entry consists of:
# V# G' h) m7 M( }# ~9 d0 Y8 RByte - Number of characters in the file's name. , l0 N& F) t1 `. b% t
String - File name. 2 {5 [* C4 S; \3 B+ m' I9 p( @3 v
Int32 - Address of the beginning of the file.
1 z f1 k1 T, |8 v( R: @Int32 - Length of file in bytes. ( ~& B& B0 b8 O+ [& |* e3 D
7 q- ]9 q- m, h2 {5 _% K% i% INo encryption. No compression. Quite boring actually. % b, _% L0 T) |. h9 f* |
This format should be a required task for an absolute newbie as an introduction to writing archive unpacking software.
( p5 b: `$ P2 [/ S/ y$ p% c R* U9 c5 e3 S- m1 I5 V
这个格式除了梦之旅3,还在很多游戏中有运用。
/ X0 A; [- } U4 qGourmania
/ P) h6 m) h m0 G$ f8 PHot Dish 2
) L8 w- Y1 N) O% WNocturnal Boston Nightfall 1 p# D5 J1 ~) w5 t% Z
NightShift legacy
6 s7 p" \0 G+ \8 Q) CPet Shop Hop
: E: \+ Y A+ o* d5 {" f/ NBook of Legends
7 V. X* ^4 s5 ?5 eChocolate Chase - s. K# r! [9 ?1 r( p" k# R% a% p
Fashion Dash + {0 ^' \; ~) W
The Clumsys # P- M: o8 r! A3 T
Mythic Marbles 4 f0 W, O- {4 Y) y
Lost Reals - Legacy of the Sun Princess
4 k. }4 S. t% K) GDr. Daisy Pet Vet (sample archive arrached - game.pfp) - u$ L) t3 a" k6 \ A1 U. T' q
Dream Chronicles + x# b+ `2 f8 n5 a$ U9 `1 n" F l
Wedding Dash
* q3 d: |& g6 {4 {* I6 L0 VHot Dish 2 ; t6 V* w" \: a' N2 N
Book of Legends " w' }, d) f$ {$ N! J1 T
MahJonggs |