关于NDS汉化中拆包打包程序的一点小程序

虽然自己还没完全懂得汉化怎么做,但根据安仔放下来的任务做做还是蛮有想法的,毕竟针对特定文件的一次性程序和适用各种类型文件的通用程序,所需要写的代码很不一样,因为为了以后能更好的利用原先的代码,必须尽量避免写死一些参数。这里我就感慨几种自己用到的方法。

1.宏定义法

#define HEAD_LENGTH		 8		//文件头名称的长度
#define PAK_COUNT			 31		//需打包的文件的个数
#define PAK_START_OFFSET	          (0x90)	         //第一个包开始的偏移位置

这个就是教科书上的方法,也是宏定义第一种也最通用的方法,对于常量确实很有用。不过个人总觉的这种常量应该是几个程序共同的数值,而不是一个程序一种常量值,所以上面代码中的各种数值个人感觉不适宜用宏定义法,除非该程序只特定解决一个包文件。(这正是我最不想写的一次性程序)

如何在程序中自动获得这些常量的值(其实这些常量相对于不同的包还是变量),暂时没想到简单的方法,因为只做了两个打包文件和一个拆包文件,获取这些常量通用的规律还没找到。就算找到了还没想到如何用简洁的代码表示出来。

2.函数化法

inline void getSrcName_i (char *srcName, char *outName, ULONG i)
{
			sprintf (srcName, "%s%d", outName, i + 1);
}

 

这个函数体只有一句,我仍然把它作为一个函数,为的就是以后修改方便,因为貌似每次各个小包的命名方式都不一样,以后想办法在拆包时就统一各个小包的命名规则吧。而且小包是否有压缩,命名方式又会有不同,是否包名中间加入lz77的标识我也说不准。

o(╯□╰)o:刚看自己代码才发觉拆包程序生成的包的文件名太复杂了,害的打包程序要这么说明:

/*
 *	打包工具
 *
 *	参数为需要生成的包名文件,格式为 *.PAK
 *	需要打包的包名要求格式为	_*.PAK_$$.PAK		($$代表小包的序号,比如84)
 *			或者	_*.PAK_$$.zip.PAK	($$代表小包的序号,比如84)
 *
*/

以后一定要在拆包的函数里面写好生成什么格式的包名,省的打包时文件名字符串处理一大堆事情

 

晕乎乎的,不写了,睡觉去了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章