冒险解谜游戏中文网 ChinaAVG

标题: 【scummvm汉化】scummvm汉化版源代码初次公开 [打印本页]

作者: shane007    时间: 2009-8-10 23:54
标题: 【scummvm汉化】scummvm汉化版源代码初次公开
网友vimrc希望编译scummvm汉化版的其他平台的版本。
! e0 R" Y4 H( I% K  i5 f% M5 t那我就把我修改过的scummvm汉化版的代码无偿公开了。6 }- w# w: s8 m$ i' {/ W! }% c9 E
我只改了2个文件,放在scumm目录即可,我是在scummvm-0.13.0基础上修改的。
7 ^' L. P6 E6 `- i. _% ]3 `编译方法在论坛检索一下scummvm就可以找到的。7 y9 |9 Y- \+ g9 g# h. \
# u, y% y7 {# e+ n6 u6 X( y! E
希望编译成功后放出PSP和DS版。谢谢!
作者: vimrc    时间: 2009-8-11 16:08
以下是支持简体中文的scummvm在其他平台上的安装包,基于shane007释出的中文字体补丁。: j' J- M$ G( C$ X( }; v2 H* U
==================, h0 f: v4 v0 ]* I& M* z/ |
Scummvm for Linux:
9 [; k" F- |& N* {
& W' u$ I( s* n* _% D7 t我在linux下面重新编译了一下你的补丁,基于scummvm 0.13.1的版本,测试了一下ft,工作正常。放上在linux下面scummvm的deb包(论坛不支持.deb文件,我先压成了.rar)。
" P" d( V9 A% u
- G8 U; g) R2 @- ]3 b截图如下: + G& d( {* |# P+ `
[attach]13931[/attach]& F$ r* o) u( f
. k5 A  {- C, c: g6 n
PSP和DS稍微麻烦一点,我现在正在建立工具链,先是PSP,因为周围有测试机器。DS我没有机器,可能需要再等待一段时间。3 I1 s) Q/ `+ }! i
==================
) R' ?, j: M  ?3 v4 w+ N7 kScummvm for Dingoo A320:
2 S- z. y4 u: @" T9 B
( Y' C( m3 q2 o/ e. BUpdate1: 刚刚port到国产的掌上游戏机丁果A320 (dingoo A320)上,运行在Dingux下面,覆盖同名scummvm文件即可。代码基于最新的scummvm 0.14版本,现在可以跑猴岛的诅咒了.[s:1][s:1] 文件有点大,没放在附件里面,附链接。
2 u. z3 e% m+ y. ]5 ]$ O- {' D3 d" x7 c% c) v2 c8 l4 x) q
截图如下:4 K9 p6 ]' X- h# v3 ]
[attach]13943[/attach]
* B% Q9 I4 C- B4 @, B8 f9 m [attach]13944[/attach]
0 Y4 p3 F. H0 C1 y: F- H8 y [attach]13945[/attach]! g# l: s# _& x5 L  E" e
[attach]13946[/attach]
4 b/ e5 ?# I/ i2 I [attach]13947[/attach]
, k& v: L7 X! U$ a, I& p. D: {       7 E. e' u8 {- `5 \2 ^

8 n) q$ E+ j8 _% f" T( n0 W6 R
1 ]9 |/ h9 ^7 w6 ?; ^9 }; O! Y3 ^下载链接:* W- p& a1 l3 D/ b6 b0 n. ?
http://rapidshare.com/files/266149792/scummvm_patched.rar.html
  r" R' w( v; u2 ]/ y% Dhttp://www.rayfile.com/files/a4b ... -8f80-0014221b798a/' e& `6 x6 k* ], M  H# W! d
6 u2 ~3 k) [1 }" K3 G+ z% j
Dingoo上面跑scummvm的视频如下:
' V% W8 g8 {8 O9 gwww.youtube.com/watch?v=HRsnReq2s0M
3 f/ Q0 J* V( t" Z8 E; k4 T2 u$ P5 q  I2 a. A7 t; e; A
==================9 Z" D1 q% u$ j
Scummvm for PSP:: i$ E0 t( T# M

: }& W" a# H* O: p) T- W基于最新的svn的scummvm0.14版,解压后有两个目录,分别对应于1.0版本和1.5版本的固件,如果觉得默认的皮肤不好看,就把windows版的scummmodern等文件复制过去就好了。  |4 ^: C2 ^* j4 R4 v0 o
" f; u+ b  P8 l* e- w$ S
PS: 哪位有空可以帮忙看看The Curse of Monkey Island,这个版本应该支持了。[s:2]
作者: longsun    时间: 2009-8-11 17:12
请问楼上,PSP版本的scummvm是用摇杆模拟鼠标吗?DS版的直接点击?那如何判断左键右键?4 M& H& t; D* f0 a
DS版的编译好了应该可以用模拟器来测试,No$gba 2.6a模拟得很完美,不过需要配放大镜看,呵呵
作者: shane007    时间: 2009-8-11 17:14
你动作可真快,支持你!7 D/ K, ?4 V/ z
希望早日看见PSP版和DS版。
作者: vimrc    时间: 2009-8-11 18:51
引用第2楼longsun于2009-08-11 17:12发表的  :
5 E9 R4 A( S* y$ n% c* r2 @, g1 P请问楼上,PSP版本的scummvm是用摇杆模拟鼠标吗?DS版的直接点击?那如何判断左键右键?) e2 j* Z2 g0 @/ l
DS版的编译好了应该可以用模拟器来测试,No$gba 2.6a模拟得很完美,不过需要配放大镜看,呵呵
, A! U7 C7 \9 O$ H$ h3 F* h: h& U
PSP是用摇杆模拟鼠标,左键右键映射到随便两个键就行了。
作者: brother_1chi    时间: 2009-8-11 18:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: vimrc    时间: 2009-8-11 20:11
新增了国产游戏机丁果上支持简体中文scummvm,掌机上面显示中文的效果非常好,截图稍后放出。 [s:2]  [s:2] 。
作者: shane007    时间: 2009-8-11 20:34
老兄,你挺厉害的!
作者: shane007    时间: 2009-8-11 20:38
这里的O版有DS,也许她可以帮忙测试DS版的。
作者: brother_1chi    时间: 2009-8-11 21:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: vimrc    时间: 2009-8-11 21:36
丁果它就是一款跑模拟器的山寨掌机,可惜官方开发资料几乎为0,不过这东西在国外火的很,很多老外现在都在开发移植些东西,很多文档都是他们写的。和他们联系合作赚钱倒真的是一个好注意,哈哈。
作者: shane007    时间: 2009-8-11 21:41
期待丁果上的抓图。; \! U! P+ {' O$ }2 ~
对了,vimrc 请介绍一下你自己吧。
作者: brother_1chi    时间: 2009-8-11 23:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: vimrc    时间: 2009-8-12 00:38
PSP版的也放上了,哈哈,我是学生,学电子的,有空的时候喜欢鼓捣点小东西玩玩 [s:2]  [s:2] 5 K  r: q4 b4 W  r) u$ x1 @
7 j4 k: i$ j6 S% P' {: V
DS版的又要重新建立工具链,估计得下周再忙这个。丁果抓图比较麻烦,现在手头没照相机,等明天再发,爬走吃晚饭了...
作者: shane007    时间: 2009-8-12 11:33
对了,请问vimrc 是否有兴趣参与scummvm的汉化改造,让更多的游戏实现汉化?; u+ k- w0 ?1 M  O  i% O  I
其实很多游戏都有可能汉化的,不过我一个人是实在忙不过来了。
作者: vimrc    时间: 2009-8-12 16:13
刚刚补上丁果的截图.
' J8 J, D4 B. f* h: m& g
$ b' Q. B1 v3 X# J# P. O回shane007,6 a" Y8 y' O/ c$ b. L  U; h
下周开始,我在公司实习,开始写毕业论文,可能没有太多时间。12月份的时候会有假期,那个时候我就可以帮忙做点东西了  [s:1]
作者: shane007    时间: 2009-8-12 17:23
收到,到时候别忘了来帮忙喔。% q- `5 Y+ b0 H& l4 Q5 I; |
丁果的效果很不错嘛。
作者: vimrc    时间: 2009-8-12 17:43
没问题,说话算话  [s:1]
作者: ljnn    时间: 2009-10-10 14:28
照这样子改也可以运行凯兰迪亚传奇中文版吗,我有ds和m3扩展卡可以帮忙测试。
作者: shane007    时间: 2009-10-10 14:34
引用第18楼ljnn于2009-10-10 14:28发表的  :9 H+ V+ a$ P  ~% o# t3 z! ], q, ?
照这样子改也可以运行凯兰迪亚传奇中文版吗,我有ds和m3扩展卡可以帮忙测试。
; {! l3 \8 J+ U" w8 L% x
凯兰迪亚传奇中文版你可以用dosbox来运行
作者: gamadao    时间: 2009-10-14 13:57
昨天花了点时间,把韩国掌机gp2x的scummvm按照楼主给的patch重新编译了,基于scummvm1.0rc1版本
, ]) D' a1 J6 R9 _3 Z不过楼主和楼主给的patch略有不同: $ ?8 b% y2 x0 N
1. scumm/string.cpp不用修改,仅需替换charset.cpp
  O" S) M1 m4 |$ W4 y/ k4 Z; }2. 需要修改comm/utils.h和common/utils.h加入中文语言定义支持
- O* _$ U9 E. G6 Y3 G: @[attach]14346[/attach]
作者: shane007    时间: 2009-10-14 17:29
厉害啊,又出现一位高手!
; u/ x5 Z! r9 S% Z0 x" y* N( ^( E5 k对了,断剑1也搞定了,代码也发布了,你有兴趣也可以试试看。
作者: gamadao    时间: 2009-10-16 00:20
谈不上高手,gp2x本来就是官方支持的,只要部署好环境,动一下指头就好了。! N* \$ x$ g7 p, m5 U
断剑1也发布了?好东西啊,我的最爱啊,还有2呢,等着老大赶紧汉化呢。; S  o6 p; H( y2 s: @
不过断剑1用gp2x估计效果不好,我看看。这个残废的qvga屏幕。周末试着看看,呵呵
作者: shane007    时间: 2009-10-16 06:26
断剑1的代码在这里,断剑2也快了。你可以试试看。, S4 N7 Z4 z4 E
https://www.chinaavg.com/read.php?tid=19072
作者: gamadao    时间: 2009-10-18 22:18
引用第23楼shane007于2009-10-16 06:26发表的  :
+ K" r2 d, D# T4 q断剑1的代码在这里,断剑2也快了。你可以试试看。
2 v, l' k0 o" J, v3 Z/ Thttps://www.chinaavg.com/read.php?tid=19072
笔记本坏了,今天才修好。编译完了,但是字幕是不是还没有呢?
: H7 Q& l, [# V我同时也做一个psp的环境吧,估计gp2x的qvga屏幕没法用(我还没看到效果,如果要可用,估计得修改你的patch),psp的大屏才差不多适合用。
作者: shane007    时间: 2009-10-18 22:42
字幕的确还没有,正在汉化中,不过应该可以看到效果的,有假的sample字幕,以后替换真的就行了。我也估计gp2x可能有问题,因为要载入一个4M的字库文件到内存里面,怕内存可能不够。
9 U. Z1 U, c/ C! i# ]$ E" K! Q* k当然,屏幕大小也是个问题。4 T; R2 f) S1 I  `9 H! q, S: r' I
( Z1 p. p% b. ?% D0 e2 I0 ?2 v
4M的字库文件,对PSP该没问题吧。
作者: gamadao    时间: 2009-10-18 22:53
引用第25楼shane007于2009-10-18 22:42发表的  :- T# |' L9 G; y" L/ a
字幕的确还没有,正在汉化中,不过应该可以看到效果的,有假的sample字幕,以后替换真的就行了。我也估计gp2x可能有问题,因为要载入一个4M的字库文件到内存里面,怕内存可能不够。% x1 _3 f, {* S& I8 U; w* R3 `
当然,屏幕大小也是个问题。: }! W+ q+ V! S" e8 N/ c

* W3 z6 H+ j' V& w% N2 H9 b% M8 y4M的字库文件,对PSP该没问题吧。
sample字幕在什么地方?你发的binary里面?内存应该问题不大,我试下
作者: shane007    时间: 2009-10-18 23:15
sample字幕就是,bs1.dat  啊。# n9 O1 t6 i9 [& C
bs1.dat  里面的字幕1之类的翻译完了就是汉化了。9 a( v4 i) \8 H" o6 t% u
在sub目录下面的
作者: gamadao    时间: 2009-10-18 23:19
引用第27楼shane007于2009-10-18 23:15发表的  :! i8 t5 w$ n& x# N
sample字幕就是,bs1.dat  啊。
2 a& c9 f1 L1 j% W5 f4 tbs1.dat  里面的字幕1之类的翻译完了就是汉化了。7 j( Y' E3 k) }- s/ [8 X. Y( A
在sub目录下面的
ok,明天下了班我试下,我现在最愁的还是我恐怕得改你的patch,看看能否让字体变大一些9 D1 @! y6 P6 T( p2 B- t- P: l
gp2x用的sdl,做法基本是先输出vga然后再缩小化成qvga
作者: shane007    时间: 2009-10-18 23:23
要改patch? 理论上可以,其实不是太难的。
1 r9 H. M/ u. `8 Z& I- D; R不过我自己不会去改,我还要研究别的。' q- C# n5 p- G( `1 n: q- O
不过我可以教你怎么改。
作者: gamadao    时间: 2009-10-19 08:58
引用第29楼shane007于2009-10-18 23:23发表的  :9 Q' X& q( d- ~  ^3 f
要改patch? 理论上可以,其实不是太难的。
2 d$ c: u! O, ~; Z' v不过我自己不会去改,我还要研究别的。$ Z9 H  f4 s/ e/ v1 k8 H  D
不过我可以教你怎么改。
这个我自己来改,你赶紧继续忙其他的,人民期盼着呢,呵呵
作者: shane007    时间: 2009-10-19 11:36
引用第30楼gamadao于2009-10-19 08:58发表的  :
% _6 v/ x0 X9 J* {) {7 I5 z
& _' r+ B# n+ M* m! ^6 V这个我自己来改,你赶紧继续忙其他的,人民期盼着呢,呵呵
: s9 i. Z$ _+ o9 g, L) T3 S
呵呵,没问题。9 _, B  z* S8 s1 A) X
你要是改成功了,别忘了发布在这里。再请拍张清楚点的照片。  D) N4 N8 ~, z8 X
谢谢了。
作者: gamadao    时间: 2009-10-19 19:57
比较麻烦的事情出现了,运行直接黑屏了,我得想个办法把日志输出到文件里(得研究下怎么启用scummvm.out.txt)
作者: shane007    时间: 2009-10-19 20:01
引用第32楼gamadao于2009-10-19 19:57发表的  :8 Z7 d& e) f) P
比较麻烦的事情出现了,运行直接黑屏了,我得想个办法把日志输出到文件里(得研究下怎么启用scummvm.out.txt)
8 M, r4 Z+ R2 @; Q) j/ y8 G* k) d
字体文件和字库的路径都对吗?怀疑是内存的问题。
) \9 }$ D) p- j7 |可以多加些log输出,看看是哪里出的问题。
作者: shane007    时间: 2009-10-19 20:02
log的话,自己输出到一个文件里面也可以啊。
作者: vimrc    时间: 2009-10-19 22:58
这贴必须出来冒个泡了,scummvm的后援团越来越壮大了 :)
作者: vimrc    时间: 2009-10-19 23:05
引用第32楼gamadao于2009-10-19 19:57发表的  :* |; {) A0 n3 [3 H
比较麻烦的事情出现了,运行直接黑屏了,我得想个办法把日志输出到文件里(得研究下怎么启用scummvm.out.txt)
gamadao, 你是用断箭1默认的补丁编译直接灸黑屏了吗?还是想把字体改大的时候黑屏的?我有空的时候试一下。
作者: shane007    时间: 2009-10-19 23:07
哇,vimrc 你也来啦。
, C8 s  A; S' }* D7 E. }这下热闹了,呵呵。
作者: gamadao    时间: 2009-10-19 23:10
我还没尝试变大字体呢,直接黑屏。奇怪的是gp2x自动就有debug输出啊,但是文件中却什么都没有。- B7 o5 K2 f7 k: [/ K! h/ d" }6 ]0 z
我也不知道哪出错了,我甚至在想是不是先编个zaurus的,起码能看到命令行输出了什么,呵呵
- h8 Q! c# o6 A" N, G我太想gp2x那根串口线了。我的gp2x usbnet死活不行,郁闷
作者: gamadao    时间: 2009-10-19 23:11
引用第36楼vimrc于2009-10-19 23:05发表的  :: c5 k- e# |% q7 w* n0 j4 \- j
) b1 h+ W( L: p  g4 w2 @; ^( j! q
gamadao, 你是用断箭1默认的补丁编译直接灸黑屏了吗?还是想把字体改大的时候黑屏的?我有空的时候试一下。
嗯,对对,dingo也有类似的问题,也是qvga屏幕,呵呵
作者: vimrc    时间: 2009-10-19 23:14
引用第38楼gamadao于2009-10-19 23:10发表的  :! u* W( O' h$ H1 V( {" G" O4 H1 ?
我还没尝试变大字体呢,直接黑屏。奇怪的是gp2x自动就有debug输出啊,但是文件中却什么都没有。* o* C0 o  v) D+ `3 j' O2 t9 n
我也不知道哪出错了,我甚至在想是不是先编个zaurus的,起码能看到命令行输出了什么,呵呵. K& K9 Y1 c9 @$ f3 U. p
我太想gp2x那根串口线了。我的gp2x usbnet死活不行,郁闷
- M+ ~8 m0 R; n) E# ]6 \
我没有gp2x,不过你可以先用linux的makefile,在linux下先把版大的补丁打进去看黑不黑屏,, [! b' P0 d- \* N- R# v( g
这样如果有问题至少可以用gdb或者ddd来单步调试,供参考。
+ B! ^2 _, T0 h. f" {- S" r* D: ?% c/ ^
丁果的sdl比较讨厌的是,它不支持8bpp的videoset,所以很多时候需要自己来改图像代码,
7 |+ m( D$ b; E' {一般crash掉的原因是屏幕大小没有设置对,或者使用了不合适的surface,不过gp2x的工具
# a5 K- ^- U* ?链好像提供了自动转化。
作者: shane007    时间: 2009-10-19 23:21
可以先把官方原版的编译为gp2x版看看。/ ~8 A$ O- x* g( h6 B* E1 M" ^
如果没问题的话,再试我的修改版。  p& p5 z6 b& N. ]! r" ~( g7 n
修改版可以先试试看只留那个载入字体的函数,看会否黑屏。* Z$ u' z, M) p/ Z3 d2 [
如果没问题的话,再试着加入其他函数。
作者: gamadao    时间: 2009-10-19 23:35
有道理,我怎们忘了最基本的方法了
作者: vimrc    时间: 2009-10-19 23:45
我刚下源码来看了一下,版大是只动了那个text.cpp文件吗?gamadao,也许是版大用的scummvm的版本号和你有不同,你别覆盖太多文件,如果是断箭相关的地方不对,那几个函数里面都有printf输出的,你能看到一些东西的。我现在还没有断箭1的游戏文件,待我下载一下再说- -" D0 E, |4 k' U# w; H$ v4 e

( N5 e* t, s7 |% b2 ~; l: DPS: 印第安纳琼斯在丁果的版本上有个非常弱智的问题,就是有些键它没有定义,比如游戏刚开始,进拳击场就无法控制了,gp2x是不是也有,我最近想把这个给fix了。
作者: shane007    时间: 2009-10-19 23:54
对,我只改了text.cpp文件。
作者: gamadao    时间: 2009-10-20 00:00
引用第42楼gamadao于2009-10-19 23:35发表的  :1 S7 \. o" @  o
有道理,我怎们忘了最基本的方法了
我试过了,linux是没有问题的,看来的确是字库大小的问题了
作者: gamadao    时间: 2009-10-20 00:02
印第安琼斯我还没开始移植呢
作者: shane007    时间: 2009-10-20 00:08
我的修改版是先把字库从hzk16转换为断剑1的格式,然后把4M大小的字库全部载入内存直接使用。0 v+ B+ \/ ]' O* A* m
, [* ^/ F6 Q; p9 g- j/ }, U' T& ?, U
字库大小的问题可以这样解决。
8 B* q3 S! P- ^& j% D& J0 u1 i把hzk16载入内存,需要用哪个汉字的时候再动态转换为断剑1的格式。; Z& H# H+ S- U
这样的话,hzk16才不到300K,应该没问题。和急速天龙的差不多。
作者: vimrc    时间: 2009-10-20 08:20
Hi, gamadao, shane007, 我刚刚在丁果试了一下,也有黑屏的问题,问题是这样的:7 `. I, J8 @! o4 n% a; t* g
1. 字库大小没有问题,4M的大小丁果和gp2x应该都能处理,毕竟ps模拟器游戏都可以跑的 :)
. ?: B4 S3 J( q2. 问题出在    loadChineseStrings() 这个函数上面:( W9 t' r- R( i1 k! K' x/ n
     
/ `/ [' K7 K% j) M0 a; i! \4 r8 r' o    for(k = 0; k<SUBTITLE_NUM; k++); @! m- e* M: v% _
    {
. _' ]* d8 T/ N! s1 r7 M3 e            //English subtitle
! F: a% N- C: v            _subbuf[0][k] = (char *)malloc(1024);! E/ i* ]5 l% g; V8 t
            fgets(_subbuf[0][k], 1024, _fp_sub_cn);( b6 I, w% p; u* e# u3 @
5 v; H. [9 Z1 Z
            //Chinese subtitle
- Y( B+ A$ v/ F            _subbuf[1][k] = (char *)malloc(1024);* _3 }2 N( o& q9 ^
            fgets(_subbuf[1][k], 1024, _fp_sub_cn);" [' H+ N- H" {" a! y9 ]' q2 c

+ r( _, Z9 I- I2 O6 D  a+ S            //tempbuf = (char *)malloc(1024);5 y+ ]" |3 K9 J8 `; e' t
            //fgets(tempbuf, 1024, _fp_sub_cn);( E& U" y0 P& F2 {/ c
            //_subbuf[1][k] = (char *)malloc(strlen(tempbuf)+1);4 ^$ k/ O9 H" n
            //strncpy(_subbuf[1][k],tempbuf,strlen(_subbuf[1][k]));& M) l2 E! W9 d: M7 g+ m- z

* x' M! F5 F7 y- T# F    }
( l  {; q3 g. t4 n6 D上面这段函数想要把字幕文件完全读入内存,字幕文件有10488行,所以内存被这段循环吃掉了,如果你把text.h中的SUBTITLE_NUM从10488改成100,重新编译一下,就可以看到这个中文字幕70了。这个解决方法不难,字幕文件出来时候分成几个文件就可以了,动态读取,这样就不需要把版大的vb程序重写成c了 :)
作者: gamadao    时间: 2009-10-20 08:21
嗯,抽空研究下
作者: shane007    时间: 2009-10-20 11:39
vimrc ,厉害。应该是你说的这个问题了。
9 {' W& J. V1 k; I还可以这么改,每行字幕开1024个字节的缓冲区太大了。可以减少到200左右。
, D  V- y4 Y. D0 ?3 C0 M3 C  M这样内存占用可以减少80%。$ i& c* k2 K. y! r& B3 m
_subbuf[0][k] = (char *)malloc(200); + ^- ~, x" C! {" K) F# Q& P' s3 V
_subbuf[1][k] = (char *)malloc(200);
$ ~3 M; j( y" x, P
4 K3 n+ Z" X+ s4 w) L1 f另外。分割字幕文件请用16进制工具,否则会有问题。
作者: shane007    时间: 2009-10-20 11:45
楼上2位,为便于交流,请速加入汉化技术群。/ ]- G' C% c7 M* i9 G% Y# _3 H
群号是29116134。
作者: gamadao    时间: 2009-10-20 12:12
引用第50楼shane007于2009-10-20 11:39发表的  :, V0 J) s. C/ R& j' b( l: |
vimrc ,厉害。应该是你说的这个问题了。
3 K- a: O( U( N$ n2 y还可以这么改,每行字幕开1024个字节的缓冲区太大了。可以减少到200左右。
1 S$ ?) l3 Y: S5 j1 m7 L/ N& o* B" i这样内存占用可以减少80%。8 X& n3 y- N9 A  \
_subbuf[0][k] = (char *)malloc(200);
# x3 Y5 u5 T2 f: ~, n, d; g _subbuf[1][k] = (char *)malloc(200);
8 _9 L2 {& T" ]. {% I.......
没错,确如vimrc所说。我刚刚修订了text.cpp,改成了convertSub的时候去多一层判断,从头到尾定位一次subtitle的位置。然后我也会适当的调整下这些常量的大小,寻求一个平均值0 `# L) T& H2 X* s' L
接下来就是要扩大字幕了,果然在qvga屏上,缩成一团了
作者: gamadao    时间: 2009-10-20 12:12
引用第51楼shane007于2009-10-20 11:45发表的  :
" _+ E6 }: o; U9 y2 y楼上2位,为便于交流,请速加入汉化技术群。. _; O2 }5 }: B  K) J
群号是29116134。
我平常上班是没法用qq的,等下班后吧
作者: gamadao    时间: 2009-10-20 12:39
引用第52楼gamadao于2009-10-20 12:12发表的  :
& X5 Y& l' x, U
7 D5 I& I& m3 z, C没错,确如vimrc所说。我刚刚修订了text.cpp,改成了convertSub的时候去多一层判断,从头到尾定位一次subtitle的位置。然后我也会适当的调整下这些常量的大小,寻求一个平均值
4 l! I: ~, r! U9 M接下来就是要扩大字幕了,果然在qvga屏上,缩成一团了
刚刚进一步测试了下,仅仅修订每个字幕的长度为200还是不行,所以我在gp2x上还是保持这种分段载入的方式好了。8 `# O% a( S8 T  q; K& B- _
接下来就是要研究如何扩大字体显示了
作者: gamadao    时间: 2009-10-20 12:55
引用第54楼gamadao于2009-10-20 12:39发表的  :
% T! K* @) [9 ]9 W9 L
& ^9 e$ p5 U4 p: I/ k$ P刚刚进一步测试了下,仅仅修订每个字幕的长度为200还是不行,所以我在gp2x上还是保持这种分段载入的方式好了。
) F% w0 q5 U. S. r3 y4 `, b接下来就是要研究如何扩大字体显示了
哦,我发现刚刚犯了个错了,确认了,单纯的将1024改为200就可以解决问题了,这样不用折腾字幕文件了
作者: vimrc    时间: 2009-10-20 17:40
shane007, 好的,我稍晚时候加qq,现在我电脑没权限。gamadao,有了好消息贴出来,加油!
作者: shane007    时间: 2009-10-20 17:44
OK,收到。
作者: gamadao    时间: 2009-10-20 21:29
我把字幕变胖了(基本能看清了,比以前好多了),但变高的时候总是出错,我怀疑是绘制屏幕的时候出错了
作者: shane007    时间: 2009-10-20 21:54
你把宽高变为多少了?
6 H" s& u' V, C" X0 a5 x
+ M/ Y4 W# E: q# t, x2 c* l2 w2 l目前每个汉字是宽20像素,高26像素。其中汉字部分是含边框宽18像素,高18像素。
# n) @5 s* C3 K  s0 ~. A7 T建议你可以改为:" q( ^( ?& n  V5 l/ \) J& q( }
每个汉字宽28像素,高26像素。其中汉字部分是含边框宽26像素,高26像素。
- M; e: z5 ]$ J+ s0 `就是说里面是一个24点阵的汉字。
4 |) [# f6 F) ]2 O% [9 @( w
/ ?$ p) r# X2 Z* Q7 r( R0 H) r' @高度26最好不要变。你可以先在PC版或linux版上面测试。
作者: gamadao    时间: 2009-10-20 23:10
不够,我调成了高26,宽40,可以感觉能看清了,我现在想尝试改成高52,宽40
1 w* ?4 C2 c3 f# y8 Z我在用linux尝试,但是总是异常退出
. g) C% N8 e4 k4 E1 `& M  Q我现在将焦点集中在了/ K+ q8 P, Q/ V  Z# H3 J, |
_joinWidth = charWidth( SPACE ) - 2 * OVERLAP;
" y6 O9 k+ K2 m5 Z* t" m_charHeight = _resMan->getUint16(_resMan->fetchFrame(_font, 0)->height); // all chars have the same height  ^# ~+ W. e( v# e; E: @8 r  o

作者: vimrc    时间: 2009-10-20 23:41
gamadao,太棒了!
1 L) ]( _: g* Q' I0 A# Oshane007, gamadao:- L: D+ p, H9 H8 {8 X- A$ [* @
我有一个想法: 既然现在字幕文件是明码的, 可不可以直接写一段程序, 不必理会sword1的text绘制函数是如何转换的, 直接使用sdl_ttf()把字幕绘制到屏幕上去, 这样可以调用不同的truetype字体, 字体的位置和大小可以由sdl_ttf自由定义, 并且繁体中文和简体中文都可以一次实现. 这个倒是有现成的函数可以用,比如游泳的鱼写的金庸群侠传lua 0.66版里面的charset.c文件就有类似的例子. 这个可以从这里下载到: http://swimmingfish.ys168.com/
6 @# k8 f  @" i( s: l6 I# W$ c
+ k  H; j, r: ?: Z* W' ]大致的效果可能如下:4 j7 p. l* A3 M2 s
http://sites.google.com/site/sdlgamer/beginner/lesson-11
作者: shane007    时间: 2009-10-20 23:41
你把
! o; I" e) y/ ~- R, o6 u5 _' _. a#define WIDTH_CN        209 M2 x  a' q0 O/ p
#define HEIGH_CN        267 Q& t6 \: R2 C" E
修改为6 s' k! A1 R: q
#define WIDTH_CN        40
: d0 n4 H3 |) Y5 q) h#define HEIGH_CN        52+ ~& z3 h- E1 \# D9 `7 B7 R; m1 Y
_charHeight =  52 : l7 Y+ i7 y6 }8 X$ S2 ~) |

! W( E  K% P* d2 K, X$ K9 T应该就差不多了
作者: gamadao    时间: 2009-10-20 23:58
引用第62楼shane007于2009-10-20 23:41发表的  :
) b9 ?# V8 o& a( o6 w0 Q+ \# D' ?( |/ Z你把
& t# A, n8 D# g/ K6 c#define WIDTH_CN        20
- Q# _+ G  I$ N- L( T$ I#define HEIGH_CN        26
' v/ m  v- B1 E: J$ ~* k修改为
& H; X7 Q$ R! [  Y#define WIDTH_CN        40- D0 N! t+ i1 g1 I
.......
不够,还需要多一些工作
( S  A% Y( X2 R+ D# j我在linux上把字体调大了,还没来得及在gp2x上试
% Q$ \' C2 W# x确认后,我把代码放出来,都是改text.cpp,主要修订copychChar部分9 r$ U1 E# H8 X" V1 p( O1 Y/ ^
[attach]14379[/attach]
作者: gamadao    时间: 2009-10-21 00:00
引用第61楼vimrc于2009-10-20 23:41发表的  :
$ F* L7 R% [: X+ o2 e* _gamadao,太棒了!
& X0 r7 y3 _$ ~shane007, gamadao:0 J; C. j  ]# O, d7 m& M1 V/ {7 r
我有一个想法: 既然现在字幕文件是明码的, 可不可以直接写一段程序, 不必理会sword1的text绘制函数是如何转换的, 直接使用sdl_ttf()把字幕绘制到屏幕上去, 这样可以调用不同的truetype字体, 字体的位置和大小可以由sdl_ttf自由定义, 并且繁体中文和简体中文都可以一次实现. 这个倒是有现成的函数可以用,比如游泳的鱼写的金庸群侠传lua 0.66版里面的charset.c文件就有类似的例子. 这个可以从这里下载到: http://swimmingfish.ys168.com/- A$ a& L5 g, |5 N

7 _# `! k3 E/ _7 `大致的效果可能如下:5 ^9 X6 H+ V8 C4 k1 y  ~9 f4 r
.......
我也想过这个思路,但感觉太麻烦了,我还是比较懒。而且这里面的处理手法很类似sdl_ttf(研究不深),貌似所有的字体绘制都类似实现,至少zodiac上的twapi也是如此
作者: shane007    时间: 2009-10-21 00:16
vimrc ,你说的方法没那么容易的。写上去容易,擦掉就难了。5 D+ J! y* n2 A4 M

) D$ E; y2 s( U对了,你们两位有时间的话可以看看这个。大小不良模拟器。
, T  v, K5 b/ d6 U我觉得有很大汉化和移植的希望的。) }( w' A# O$ t6 h$ Y* Y5 |$ d  ~
www.chinaavg.com/read.php?tid=19296
作者: shane007    时间: 2009-10-21 00:18
gamadao ,字调大以后,字幕多的话会不会显示不下?
作者: gamadao    时间: 2009-10-21 00:19
哦,还没试,我不记得是否修订过analyzesentence函数,这个是判断句长的
作者: shane007    时间: 2009-10-21 00:22
对了,indy4 也就是亚特兰第斯之迷失世界 基本上块翻译好了。
/ z, `! o$ v1 }还有一些小小技术问题要与2位探讨。
- s4 H. x0 Y! p1 ]( h& V% i- ~- Y' O/ `, p
明天再说。
作者: vimrc    时间: 2009-10-21 00:29
OK, 没问题, 能帮版大的地方一定帮. 我这里和国内有6个小时的时差, 有时候上线时间比较诡异, 很多贴我一般会半夜三更回 [s:2]
作者: gamadao    时间: 2009-10-21 00:33
引用第65楼shane007于2009-10-21 00:16发表的  :& C: q! y. q8 W0 ?( L) \- o
vimrc ,你说的方法没那么容易的。写上去容易,擦掉就难了。
7 ~( V  ?) y: e; I3 u1 G/ N1 r
$ @9 A, M" E/ M0 J% A对了,你们两位有时间的话可以看看这个。大小不良模拟器。; e" ]4 X2 L4 q) ?& c
我觉得有很大汉化和移植的希望的。8 k- J2 Z3 ~4 D& n! `) X1 x: D+ n# S1 P0 s
www.chinaavg.com/read.php?tid=19296
难道不是字体都是一帧一帧的画到画布上的么,不存在擦掉的问题吧?
作者: gamadao    时间: 2009-10-21 00:34
indy4好东西啊,我至今都被卡在开始后不久的地方,呵呵9 b" \* g) S5 m# i- m$ R
上班一般较忙,但还会努力修订的,呵呵
作者: gamadao    时间: 2009-10-21 00:39
vimrc ,忽然想起来你说的按键的问题,虽然那个游戏我还没玩到,但至少从外观的感觉来看,我觉得gp2x的按键可比丁果多多了
作者: gamadao    时间: 2009-10-21 02:12
我试过了,gp2x和长字幕分行都没问题,附上我的代码
作者: vimrc    时间: 2009-10-21 02:53
引用第72楼gamadao于2009-10-21 00:39发表的  :
. V# v$ j% ~  F9 q6 ^vimrc ,忽然想起来你说的按键的问题,虽然那个游戏我还没玩到,但至少从外观的感觉来看,我觉得gp2x的按键可比丁果多多了
: T1 ^6 ~7 j1 a9 M$ y# T
是的,我是看到这个网页:" ]  h9 o( x1 R# M) g% V5 T) ^( u
http://wiki.scummvm.org/index.php/GP2X/Compatibility
* a* ~6 @$ ?6 t3 u" V* m( U中的这一段:" M( Y. Z# B& _3 u$ I4 @+ J/ q
SCUMM    Indiana Jones and the Last Crusade    Mostly Working    'Fight' controls do not work in this release.
! S3 A( ?  w" w) l5 H; G, Q3 G
9 j' V- f$ e2 Bdingoo也有相同的问题,我就想问问gp2x有没有解决,如果解决的话,直接把程序拿来参考一下就行了。
作者: shane007    时间: 2009-10-21 08:22
vimrc ,gamadao ,indy4中有汉化后字体高度超过对话选择栏高度的问题。% s0 B. b  I5 |2 P
2位帮忙想想有什么好方法没。
作者: gamadao    时间: 2009-10-21 11:12
引用第74楼vimrc于2009-10-21 02:53发表的  :
4 V8 ~! _; _3 b& v( B! T* W
; y; [: i4 w% B) t1 t' w( x
2 B  O( Z8 }1 f6 O% [- D是的,我是看到这个网页:
0 s, E; G7 o; w! Ghttp://wiki.scummvm.org/index.php/GP2X/Compatibility
: E& b( F' B- t, E中的这一段:
+ h* U, d& b+ E: G( F.......
那就是肯定没解决呢,我只玩过indj4而已
作者: gamadao    时间: 2009-10-21 11:13
引用第75楼shane007于2009-10-21 08:22发表的  :
0 J. N' \) W. |& I, S* uvimrc ,gamadao ,indy4中有汉化后字体高度超过对话选择栏高度的问题。1 H6 W( d2 `0 W# @+ u8 u1 }
2位帮忙想想有什么好方法没。
你是在按照字库字体原高绘屏么?简单直接的办法.....和放大类似,缩小....
作者: shane007    时间: 2009-10-21 11:35
引用第77楼gamadao于2009-10-21 11:13发表的  :
7 @' ^, S1 s+ H" S# |* \/ T: D6 @( @) F5 L4 K4 B  Z
你是在按照字库字体原高绘屏么?简单直接的办法.....和放大类似,缩小....
: K4 F9 H# U6 m' ~. p# y
原英文字体高是8,中文字体高是12。1 ?: H) h  {$ z# K, A2 t: e
中文字体再缩小就看不清了。
作者: gamadao    时间: 2009-10-21 17:05
ft的就是12是么?你现在的效果能贴个图出来不?最好能贴下字体部分的放大图
作者: shane007    时间: 2009-10-21 17:34
引用第79楼gamadao于2009-10-21 17:05发表的  :
! p  j) P! l% `ft的就是12是么?你现在的效果能贴个图出来不?最好能贴下字体部分的放大图
6 E" v1 T. \' N( Q$ o0 s
是的。: f6 O* F" i5 p1 ?8 U
FT的图在这里有; w0 X; j) D- m$ A$ u; W) d
https://www.chinaavg.com/read.php?tid=17631
$ K7 {9 c& t6 v# R- x2 z7 \7 H% }5 X9 d
" |/ F/ v8 w7 z/ |1 [indy4的图在55楼
( s/ Q/ t5 b' c. c' T9 uhttps://www.chinaavg.com/read.php?tid=18009
作者: vimrc    时间: 2009-10-21 18:40
我也看到了,我近期找时间好好研究一下这个字形,可能需要对字体文件开刀。
作者: gamadao    时间: 2009-10-21 19:38
代码有么?indj4是自己特殊的引擎么?( a- c* ?6 R  c0 Q. d2 e+ Q) c1 V+ {/ z
我还是想先试试缩小,貌似缩小掉1/8就好了,不一定看不清楚
作者: gamadao    时间: 2009-10-21 19:40
对了,shane007,你知道怎么在引擎里取到当前游戏的路径不,我想修正不把sub和fnt放到scummvm的根下,而是放到游戏根目录里,感觉不太....嗯.....完美
作者: shane007    时间: 2009-10-21 21:09
回gamadao,indy4也是scumm引擎的。
8 i9 P  r# M0 H4 _( G+ }: H代码就用现在的我改好的代码就行了。
8 @' [# }% [: H) A0 U1 ?要缩小掉1/8恐怕没那么简单。你恐怕无法单独缩小字幕的。
' J2 a) D! f% u; b, h0 c! P5 J3 K% a) N现在字幕是原样大小贴到surface上后再scale的,在贴上去之前就scale好像比较难。
2 S1 o* c3 Y' e$ @如果能用ttf字体就好了。
! a( v7 z: y8 j* x0 _还有,indy4汉化后有无规律的崩溃现象,我估计是把字幕导入以后把某些数据搞坏了导致的。+ u% ~6 h* O: o
所以有把字幕修改为象断剑那样的外挂方式的想法。你觉得如何?
) N8 {. d* |4 R
1 p2 [( x0 u+ V+ D字幕的路径,我是故意放在scummvm的根下的,我觉得这样才够绿色。对原版游戏不作任何改动。- K  f" h2 @' [3 L
那个韩国版scummvm也是这样的,我就是学它的,所以建议你不要改。
作者: shane007    时间: 2009-10-21 21:12
引用第81楼vimrc于2009-10-21 18:40发表的  :
5 |! E8 @9 b+ F; Q我也看到了,我近期找时间好好研究一下这个字形,可能需要对字体文件开刀。

) P4 e* \% G" i' P" @要解决这个问题对字体动刀应该没用的。
% h/ L4 N* W# ]  ~  f" X1 X我觉得可以研究一下osd字幕的显示方法。
作者: vimrc    时间: 2009-10-21 21:22
引用第84楼shane007于2009-10-21 21:09发表的  :
: c  e& e5 Y0 m7 u$ Z$ z' {回gamadao,indy4也是scumm引擎的。6 Y8 ], e9 w: @4 [- p
代码就用现在的我改好的代码就行了。# q2 I$ K. ~; s+ ~( @. E
要缩小掉1/8恐怕没那么简单。你恐怕无法单独缩小字幕的。
. |8 @% G5 P! v现在字幕是原样大小贴到surface上后再scale的,在贴上去之前就scale好像比较难。
) G' ?, c) K" [: f7 J如果能用ttf字体就好了。: ^5 B& B" U( G- l6 D) Y2 ^2 q
.......

" h# w. `9 _' ?8 C; z0 N& _我也曾想过这个外挂字幕的问题,但是这个外挂字幕的函数需要被一些地方触发:* f' |% b# }6 ^. g8 v$ i, _
1. 比如indy4的动作菜单,walk, push那个,你把鼠标移过去上面有显示提示的6 r. Z8 d7 e6 N
2. 还有鼠标移向某处的时候,还会显示提示
: J  ?0 v; l5 F0 O, O" e: k& P
- p0 W! x% M5 @4 w# j外挂字幕的函数必须能够被上述事件触发,而且需要及时地被擦去,这个字幕可以写在什么地方还需要考虑,写在英文提示的黑框中同样有字体大小的问题,写在画面上是不是又感觉不好。
% w% V& z) j1 ^: a! W7 Z- l' k3 D2 \7 R8 u/ D
我现在还不清楚indy4引擎是如何调用这些函数的,我有时间的时候debug追一下函数看看。
作者: shane007    时间: 2009-10-21 21:27
回vimrc ,外挂字幕应该比较简单,也不用追太多代码。" c' ]6 P! W* U* c0 Y8 \
只不过把传入的英文字幕替换为中文。6 t, M, h6 ^+ e
可以看看韩文版的代码
8 [4 C1 o- |5 Q( ~& ~4 Vhttps://www.chinaavg.com/read.php?tid=16110
' f4 I) E' w- r5 J0 {+ V6 p8 u: o7 P5 ~6 G( T# m
比较头痛的是字体大小的问题。
作者: gamadao    时间: 2009-10-21 23:18
引用第84楼shane007于2009-10-21 21:09发表的  :- ]  I- U, b# I- \& I7 [% R, @
回gamadao,indy4也是scumm引擎的。8 b* h. |) N6 }4 U
代码就用现在的我改好的代码就行了。
. @4 x% k; N/ h要缩小掉1/8恐怕没那么简单。你恐怕无法单独缩小字幕的。/ E+ ~! i2 M+ V0 K  F$ ~$ \
现在字幕是原样大小贴到surface上后再scale的,在贴上去之前就scale好像比较难。. h* ?8 }$ c6 g8 [( Y
如果能用ttf字体就好了。
0 u- o4 t7 k# [- o* y8 G$ n7 @.......
主要我想要一个统一修订版的scummvm,而不是for sword1专版或者其他的专版,这点对于嵌入式设备很有意义
作者: shane007    时间: 2009-10-22 08:20
统一修订版的scummvm不难做啊,我现在发布的PC版就是的。
$ u5 J$ E6 V3 u9 ^如果要对某个游戏作特殊修改的话,限定gameid就行了。
作者: vimrc    时间: 2009-10-22 09:14
Hi, shane007,
2 r- o( h/ T% }3 ?/ l
6 K1 n+ Y/ b* E" ^5 k2 X我刚刚浏览了一下scummvm的结构,按照普通的编译方法,我们得到的scummvm应该是define了SDL_BACKEND的,debug的时候也会发现scummvm会跳到/backends/platform/sdl/下面处理一些事件,那么我怀疑Graphics::Surface实际上和SDL_Surface相像甚至是一回事,回到engines/scumm/charset.cpp这个目录来看,前面部分的函数完成的是对不同种类字体的读取和转换。我现在考虑到这后面两个函数:CharsetRendererNES::drawChar()和CharsetRendererNES::drawBits1(),这个程序似乎在完成了前面的转换之后,终于开始使用这两个函数把字体绘制到屏幕的(x,y)处(实际也就是那个surface类型的指针)。7 E: L! N) N1 p( K+ R, i

% c$ p! A# P! w# _我想近期把这个程序改一下:scummvm整个系统并没有使用sdl_ttf这个函数,所以我想添加这个函数,把字直接绘制到那个surface上面,应该可以擦去的。如果怕这个ttf函数影响其他游戏,加一个game_id的判断让它只对indy4有效就可以了。
/ _7 C8 w8 r9 @" z0 ^8 P, P4 E, V, U: C1 ?: ]$ P# `5 A1 y
验证这个想法,往屏幕写一个简单字串测试一下就可以了,有错还请大家指出。
作者: shane007    时间: 2009-10-22 11:41
vimrc ,看了你的思路,觉得基本正确,没什么大问题。有问题也要等到编的时候才会发现。
. {- ]+ U1 _" S/ vGraphics::Surface实际上应该和SDL_Surface是一回事,不过好像定义了好几个Surface实例,用来显示不同的层,把字幕贴到最大的那个层上应该就行了。1 N1 o5 O: l9 k* p

. j% o" B8 t8 b* g/ |其实类似你的思路我早有了,不过我手头汉化事务太多。, R! i" O8 q" @3 I6 C; O
有些思路连写下来都来不及,更别说去编了。
8 r4 s& C5 d" i; D你先行测试吧,要是能做成一套各个引擎能通用的函数就更好了。
作者: vimrc    时间: 2009-10-22 15:38
shane007,好的,我这周末的时候写一下,遇到问题再贴出来和大家讨论。  [s:4]
作者: shane007    时间: 2009-10-22 17:29
引用第92楼vimrc于2009-10-22 15:38发表的  :
0 U! J* n( A9 q3 y* [shane007,好的,我这周末的时候写一下,遇到问题再贴出来和大家讨论。  [s:4]
3 K& L2 g# G- R" X
OK,看你的了。
作者: vimrc    时间: 2009-10-26 21:22
shane007,我遇到一些问题,刚在scummvm上问了一下:
) v, a0 w) J7 thttp://forums.scummvm.org/viewtopic.php?t=8093
9 T. t& x4 r! i# l1 V: G4 v我近期把freetype和truetype的字体都试一下,需要一点时间,有结果$ Z9 S; B7 h6 x6 W7 R( p4 E0 a+ y: I
我会即刻反馈的。
作者: shane007    时间: 2009-10-26 22:02
收到,慢慢来,等待你的好消息。
作者: gamadao    时间: 2009-11-4 00:01
出差刚回来,有什么新消息么?
作者: shane007    时间: 2009-11-4 00:12
断剑2修改完毕,代码也放出了,你可以考虑移植了。6 e# _) R" J" t
https://www.chinaavg.com/read.php?tid=19075
: `8 _# c' {7 [# c, E7 m8 M5 j3 S: [% i  f8 V/ m+ B7 B, q

% g: B  O8 O8 \* n* |7 j0 `  E另外,考虑汉化Discworld2(荒诞的世界2),由于时间的关系代码我还没细看。  I' r7 i/ H- E
你有时间的话可以研究一下,如何着手比较好。找找突破口。
1 X1 ^: L  P& ^: f( _. f0 B1 c9 Thttps://www.chinaavg.com/read.php?tid=19528




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2