日志文章

2007年07月07日 22:57:56

Pandora Script小程序

   最近尝试做了这么一件事:通过一个脚本程序来把标准的二进制图片转换为自定义的图片格式(涉及到一些常规或不常规的压缩算法)。二进制图片的信息由一个宿主程序提供。传给脚本程序后其他的宿主程序就不管了。主要要求那个脚本程序可以自由的调用其他二进制模块,甚至直接call到某个地址上(因为有些时候我们得利用别人DLL里的一些代码,而这些代码的入口根本没有导出来)。而且要求在脚本程序内可以实现一些低层次的操作,如内存、位操作等,这样就可以不过多的依赖外部二进制的模块了。
   本来打算在Lua的基础上扩展。Lua与C的互动是通过一个自己定义的栈来实现的,提供了一些API来操作。为了增加更多的灵活性,我自己写一个小的脚本系统,有类似C一样的操作符和流程控制结构,提供与C一样的函数传值机制,这样只要宿主程序生成一个状态机,设好传值后就可以放飞脚本程序了。
   整个程序绝大多数由纯C写成,其中有一小段汇编,核心代码中没有使用任何的外带库(包括C标准库)。内置的脚本库函数属于扩展部分,使用了C标准库和几个Win32api中关于DLL的几个调用(Unix下也有相应的调用)。通过内置的库函数,脚本程序可以直接调用DLL里的C函数,也可以调用宿主程序注册的函数。一切都是与C一致的,取值设值不需要push来pop去。
   今天终于又上来了,前几天把那堆垃圾代码重新理了理,调整了一下调用(当时写的时候晕忽忽的)优化了一下,主要是把文本预处理成了二进制代码(所有能预计算的都预计算了),整体速度至少要快了5倍。其次优化了运算符函数,位操作的速度得到了很大的提升(忽略了浮点类型)。如果单做计算和大循环速度和Python差不多了(试了800x600的图片)。另外内建支持了UTF-8和UTF-16编码的字符串。二进制调用规范支持__cdecl、__stdcall和__thiscall(以便以后直接调用C++类成员函数)。



(1)常数
浮点数:XXXXX.XXXXX;
二进制整数:0nXXXXXX;
八进制整数:0oXXXXXX;
十进制整数:XXXXXXXX;
16进制整数:0xXXXXXX;
字符型整数:'CCCC';
原始字符串:"""string""";
转义字符串:"\a\b\f\\n\r\t\v\char\xXX",字符串前面加u为UTF-8字符串,加L为UTF-16字符串

(2)操作符
! ~ * / % + - | & ^ >> << @(取地址)
< <= > >= == != =
*= /= %= += -= |= &= ^= >>= <<=

(3)流程控制
if [exp]
[
  // code block
]
elif [exp]
[
  // code block
]
else
[
  // code block
]

// 循环
for [init, check, step]
[
  // code block
]

while [exp]
[
  // code block
]

do
[
  // code block
] while [exp]
循环里支持break和continue语句

(5)注释
行注释有//和#,块注释是/* */

(6)一些想法
增加sys.importBin [bin file]调用,在二进制模块里导出一个成员来装载模块内的调用;
增加sys.importXml [xml file]调用,使用一个XML文件来装载一组二进制模块的调用;
增加内嵌第三方语言的外部语言模块,可以做到在脚本里嵌入汇编、C、Lua等语言;

Tags: 潘多拉   脚本  

类别: 一般编程 |  评论(6) |  浏览(7713) |  收藏
一共有 6 条评论
6楼 [匿名]highkay 2007年07月12日 22:33:24 Says:
很期待这几部大作哦,还有我试了alice-soft做的游戏,包几乎都解不开,虽然是alk/ald的文件,只有音频文件可以用,还有就是tgl的探险道,时空魔镜等游戏,这些游戏的文件结构和gv表里面的几个游戏非常类似,但是解不开包,更谈不上图片转换了,工画堂的特勤也是相当的情况。gv用起来还是很方便的,除了一些小bug,国外的软件虽然解包能力强,支持上百种游戏,可是几乎都不能很好转换图片。
5楼 [楼主]我的游乐园 2007年07月12日 20:57:29 Says:
zwe只拆到了角色动画,没i拆全,由于调色板比较繁杂所以没有继续拆下去,插件也没公开,ed3和5的文件大致看过,但还没有做相应的图片插件
4楼 [匿名]highkay 2007年07月10日 22:49:21 Says:
我看到gamelib里面有双星物语和英雄传说3和5,这些什么时候能支持呢?是不是用现有的插件就能支持呢?
3楼 [匿名]highkay 2007年07月09日 23:17:36 Says:
解决了。因为调色板文件重名了.....
2楼 [楼主]我的游乐园 2007年07月09日 12:48:12 Says:
ACT文件应该都是调色板文件,另外看看文件大小是不是768个字节,如果大于这个的话,可能要删除一些内容
1楼 [匿名]highkay 2007年07月08日 15:27:39 Says:
这个不是脚本机吗.......
哦,顺便问一下,我用gv解小魔女帕妃2的时候,调色板错误,调色板文件我改了,可是仍然有问题。
发表评论