今天在用 VS2008 编译 SlOnline 的代码的时候,发现 ucl-1.03 的库不能编译了。用 OopsWare 已经编译好的版本就可以,自己编译就报错。提示的错误为
error C3163: '_vsnprintf': attributes inconsistent with previous declaration
OopsWare 使用的版本是 VS2008 Express Edition,我用的是 VS2008 Team Edition。感觉问题就是出在这里了。因为之前我用 VS2005 编译的时候也没有类似的问题。
最后查资料,应该是宏定义所导致的问题。找到 ucl-1.03 里面的 acc/acc-auto.h 这个文件,将源代码中第 436 行的代码
# define vsnprintf _vsnprintf
修改为
#if (_MSC_VER < 1500)
# define vsnprintf _vsnprintf
#endif
其中,_MSC_VER 表示 VC 编译器的版本号,1500 对应的是 VS2008。修改后,重新编译,问题解决!
2008-09-07 更新:
OopsWare 的 VC2008 Express 也有这个问题,不过他是通过修改 VC 自带的头文件来解决的
今天把 YoMax 移植到 Linux 平台了,还算顺利,一切都进行的不错。感觉很好,很开心。在 Linux 下面跑的速度很快,效果很好。
其中有几个地方修改了一下:
1)_strnicmp,在 Linux 的标准 C 库里面没有这个函数,用 strncasecmp 替换就可以了
2)_mkdir,同样,Linux 下的 C 库也没有这个函数,需要使用 mkdir。需要用到头文件 <sys/stat.h>,而且还要设置权限,跟 Windows 平台下不大一样。详细的使用说明,可以参考 GNU C Library 手册中创建目录部分的内容。
3)还有就是简单的类型定义之类的细节不同了,以及 main 入口函数的声明不大一样
具体的参数和环境:
-
- Windows XP with Service Pack 3
- Visual Studio 2005 with Service Pack 1
-
- Ubuntu 8.04.1 (Hardy Heron) with 2.6.24-19-generic
- g++ v4.2.3 (Ubuntu 4.2.3-2ubuntu7)
经过“艰苦卓绝”地奋战,终于完成了 YoMax 第一个版本。其实看到“艰苦卓绝”几个字,还加了引号,就知道其实并不是那么难的。只是将以前的代码整理了一下,然后重新用 C++ 封装了一下。功能也与原来的一模一样,唯一不同的是,在做 YoMax 的过程中,更加清晰地了解了 DJMax Pak 文件的结构,同时形成了一份简单的文件格式的说明文档。
接下来正在考虑做的事情:
- 实现跨平台支持,其实也就是支持 Linux 而已,如果自己用的话,应该是 Ubuntu 吧。
- 将 Dump 出来的几个二进制文件反向工程,了解真正的解包过程。估计这个应该会是很漫长的一个过程,估计要持续很长一段时间吧。
希望不久的将来能看到 YoMax v0.2.0,因为很多自己写的小工具都是到了 v0.0.1 或者 v0.1.0 就没有下文了。XD
2009-05-26 更新:
由于原来的 PakExtract 存在很多问题,所以,现在将主要更新 YoMax。另外由于很不幸的,以前的 YoMax 的代码找不到了,所以只好重写了代码。为了保证与以前版本不冲突,所以将版本号定为 v0.1a,其中 a 表示 alpha 版本,也就是极其不稳定的。呵呵,欢迎大家反馈问题。
下载 YoMax v0.1a
SOX 是 ShiningLore Onlie(中文官方运营的时候叫做天使)中一种类似简单数据库的东西,它里面保存了各种物品的描述,任务的对话,NPC名称等等的重要信息。
前几天跟 ColdBird 聊天的时候,他让我帮忙翻译一些中文,主要是游戏中一些任务的脚本。后来我就介绍 Tissue 给他认识了。Tissue 也很快就答应了,真的很感谢她的帮忙,虽然不是帮我的忙,但是还是要多谢一下,辛苦了。
于是乎故事就发生在 Tissue 接了这个我认为不可能的任务之后……她使用的工具应该是之前 Lily 写的一个图形化的 SLSoxEditor。这个工具在编辑的时候还是很方便的,但是在作为翻译工具的时候就有点麻烦了。用户必须要把翻译的内容先复制到记事本,翻译后再重新复制回去。所以就导致到翻译效率很低,速度很慢。本来我之前有写过类似的程序,可以直接给 Tissue 用的,但是因为之前一些数据备份的工作没做好,导致数据都丢失了,囧rz。于是就萌发了再重新写一个小工具的想法。
说做就做,马上行动!因为鄙人比较懒,所以,嘿嘿,先找救兵。看到 Athena 跟 Lily 在线,就很“厚颜无耻”地问他们要 SOX 文件的结构(其实之前我自己有分析过的,只是不想重复劳动而已,表拍砖……)。没想到 Athena 同学直接把参考代码发给我了,太感动了。简单的看了一下 Athena 的代码,大概就想起来了。然后就有了现在这个叫做 SOX 的小工具。
SOX 可以把 SOX 后缀的文件转换成带制表符的 TXT(文本)文件,并且可以用 Excel 打开编辑。修改后保存后,再运行一次 SOX,就可以转换回 SOX 文件。经过测试,可以正常的转换全部 SOX 文件,除了一个叫 CONVERSATION.SOX 的家伙。后来跟踪看了一下,估计跟浮点数有关,但由于它跟要翻译的东西没有太大关系,所以就先不管它了,让它自生自灭吧。Hoho~