下载DOS模拟器DOSBOX可以运行
![]() |
|---|
生命数修改
cseg01:0002464F mov byte ptr [eax+1], 5 //设置偏移+1的指令(当前生命数)
cseg01:00024656 mov byte ptr [eax+15E5h], 5//设置偏移5605的指令(备份生命数)
![]() |
|---|
dseg02:00050847 word_50847 dw 104h //林冲血量260
![]() |
|---|
dseg02:00050871 db 0DCh //鲁智深血量220
![]() |
|---|
dseg02:0005089B db 0FAh //锦儿血量250
![]() |
|---|
游戏目录下的PAK文件
![]() |
|---|
37:文件总数
BACK01.PCX 301408:文件名和文件大小对
索引表以第一个PCX文件头结束
// PCX文件头结构
#pragma pack(push, 1)
typedef struct {
uint8_t manufacturer; // 0x0A
uint8_t version; // 版本
uint8_t encoding; // 编码 (1=RLE)
uint8_t bits_per_pixel; // 每像素位数
uint16_t xmin, ymin; // 图像范围
uint16_t xmax, ymax;
uint16_t hres, vres; // 分辨率
uint8_t ega_palette[48]; // EGA调色板
uint8_t reserved;
uint8_t color_planes; // 颜色平面数
uint16_t bytes_per_line; // 每行字节数
} PCXHeader;
#pragma pack(pop)
// 文件信息结构
typedef struct {
char filename[20];
long file_size;
long index_offset; // 索引表计算的偏移
long actual_offset; // 实际PCX头偏移
int is_matched; // 是否匹配成功
} FileEntry;
// PCX签名信息
typedef struct {
long offset; // PCX头偏移
int is_used; // 是否被使用
char used_by[20]; // 被哪个文件使用
} PCXSignature;
总体流程:
分析文件结构:首先解析PAK文件的索引表,获取每个文件的文件名和大小。
计算文件偏移:索引表之后就是文件数据,根据索引表计算每个文件的起始偏移。
提取文件:根据偏移和大小,将每个文件数据读取出来,保存为独立的文件。
![]() |
|---|
PCX图片用的8位色的调色板,用xnviewmp 看图软件可以浏览。
![]() |
|---|







