john_he 发表于 2007-2-11 18:30:09

ONScripter如何汉化?

看过下代码,里面SJIS转UTF16的码表是硬编码进去的。
unsigned short sjis_2_utf16;

static unsigned short sjis_2_utf16_org[] = {
    {0x8140,0x3000},
    {0x8141,0x3001},
    {0x8142,0x3002},
    {0x8143,0xff0c},
    {0x8144,0xff0e},
// 省略10000行……

void initSJIS2UTF16()
{
    int i = 0;

    while( sjis_2_utf16_org ){
      sjis_2_utf16 - 0x8140] = sjis_2_utf16_org;
      i++;
    }
}

unsigned short convSJIS2UTF16( unsigned short in )
{
    return sjis_2_utf16[ in - 0x8140 ];
}
莫非要把GBK/BIG5的也一个个硬编码进去??

请教各位大人,ONS汉化有没有方便点的方法?

Miliardo 发表于 2007-2-11 19:00:49

尝试用GNU iconv?

dcx_310 发表于 2007-2-11 20:13:53

这个好,赞一个先

john_he 发表于 2007-2-11 22:40:01

引用第1楼Miliardo于2007-02-11 19:00发表的:
尝试用GNU iconv?

看了看iconv,的确是好东西,不过好象嵌入到ONS里也挺麻烦的……
ONS的代码感觉上很乱,看上去好像是读一个字->转换->渲染->读下一个字,iconv()应该是转换一个字符串的吧,一个个字来会不会很慢?

小弟对LINUX编程一窍不通,想请叫下大人,SDL在Windows下是独立的图形接口?还是调用DX/OGL的?运行效率相比DX/OGL如何?

Miliardo 发表于 2007-2-11 22:51:47

Linux

    * 视频显示使用X11,利用XFree86 DGA扩展的优势,全屏显示使用新的w MTRR加速。
    * 声音使用OSS API。
    * 使用clone()系统调用和SysV IPC,或者glibc-2.1的pthreads实现线程。

    提示:你可以通过SDL_GetWMInfo()取得SDL驱动接口的隐藏部分,从而可以实现诸如去除窗口要素和图标化窗口等效果。

Win32

    * 有两个版本,一个是适合所有基于Win32的系统的安全版本,另一个是基于DirectX的高性能版本。
    * 安全版本的视频显示采用GDI。高性能版本采用DirectDraw,并支持硬件加速。
    * 安全版本的音频回放采用waveOut API。高性能版本采用DirectSound。

    提示:你必须在主线程中定期的读取Windows消息队列,以保持程序能够作出响应。


实际上Linux下似乎也可以支持Alsa、ESD、Artsd等音频接口了……

john_he 发表于 2007-2-11 23:23:12

感谢大人解释~~~~

clarkh 发表于 2007-2-12 09:28:03

你如果会编程的话,只要自动生成一个GBK/BIG5到utf16的编码表文件,复制粘贴到那里就可以了,完全不需要用到别的东西。

john_he 发表于 2007-2-12 14:28:28

恩……虽然的确可以达到目的,但个人不是很喜欢这种方法。

本来就奇怪原作者为什么不用libiconv之类的库而选择把码表硬编码进来,不但代码量大了,将来移植到别的语言平台上本地化也不是那么好玩。

感觉上ONS完全可以摆脱NS的束缚使用Unicode而不是ANSI,把ANSI的脚本转换成Unicode是轻而易举的事情。现在用ANSI了,还是硬编码的码表,做本地化工作时就头痛了。

Miliardo 发表于 2007-2-12 14:44:30

为了兼容NS的nscript.dat……能用Unicode么……XD

john_he 发表于 2007-2-12 14:52:32

这个就是NS的“束缚”……

不过ONS好象没提供自己的脚本编译器,要靠NS的 = =b

希望ONS的作者提供一个Unicode版本的编译器和主程序,至于nscript.dat……重新编译吧
页: [1] 2 3 4
查看完整版本: ONScripter如何汉化?