冒险解谜游戏中文网 ChinaAVG

标题: 【汉化任务简报】#30 疾速天龙 字模置换程序 [打印本页]

作者: shane007    时间: 2009-6-5 20:03
标题: 【汉化任务简报】#30 疾速天龙 字模置换程序
疾速天龙是一个可以用scummvm模拟器模拟的游戏
, e, j6 H. C" U+ k. W但是在导入文本的时候,我们发现一些特定的文字无法被导入到文本中。
" [7 U& W2 w+ v% G' [3 P  i
7 @& f( o5 z7 V  t1 y我们采用修改字体文件中字形的方法,当我们需要输出文字A的时候,我们在文本中导入的是文字B,但是我们把文字B的样子修改为A。这样我们就能输出A了。" A3 `# {; x6 p& |
* G/ C! g0 V9 y9 d$ n+ x
字体文件在以下的帖子中,文件名是chinese_gb16x12.rar
# ]! U$ b4 C8 _! _  u+ L/ v) Hhttps://www.chinaavg.com/read.php?tid=16790
6 r1 t% q$ m3 z3 ?2 [+ n/ u, N8 ~+ l: ^+ l" o
字体是16X12,所以每个字模占24个字节。
( O! j: q4 E6 }% t- R- MGB索引代码如下" u* g0 s+ A/ K9 W8 g! D
idx为GB232编码+ L5 L3 L/ Y$ _2 m' f/ L: `/ Q
idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1); / M$ Q' Q- F- T& r* Z" F

6 q% V: c& t4 S- E) S7 k另外有一个要转换的文字的文件- ^/ Y) _# g9 R' a7 S
每行2个字,就是把前一个字的字模样子转换为后一个字的字模样子的意思。7 O6 J; U1 Q& p8 p4 ~! s% W- _
有若干行,循环即可。
作者: 肥牛    时间: 2009-6-5 23:53
这一句话没看懂:% ^1 w5 T/ V7 ^: V8 M
我们采用修改字体文件中字形的方法,当我们需要输出文字A的时候,我们在文本中导入的是文字B,但是我们把文字B的样子修改为A。这样我们就能输出A了。4 r; [5 E; ?9 J$ ]

% |/ z3 m' S, w# B* V1 u0 c1 }6 [能不能举个例子?
! r4 r2 o, N/ X; Z5 o8 n# \0 g; ?" }& w
还有这个“每行2个字,就是把前一个字的字模样子转换为后一个字的字模样子的意思。”,也请举个例子。
作者: shane007    时间: 2009-6-6 11:29
你可以先看一下下面这2个帖子.3 S5 c. |) o- l5 ~
https://www.chinaavg.com/read.php?tid=16610
2 x- C/ y5 D. q* d( n) H( e8 Nhttps://www.chinaavg.com/read.php?tid=17017
. \  B. J, G& U" r( v+ e. G! B
# h3 x# F8 G9 ^* m- u, |你可以用这个工具先查看一下16X12字库,有个直观的概念。
. W  @2 A; ]% \2 p4 w' v1 ]: g6 [  r$ v& P3 B' Q
我可以给你举个例子。不过只能用文字描述。
7 h" j+ n- J3 W% K( m8 U* \) b字体文件中每24个字节保存了一个汉字的字模,一个挨一个连续存放。0 j* M! }6 a8 M! z& `% f5 a, ?2 f
根据汉字的编码找到该汉字字模的偏移量的公式我写了,是一下这个公式。
8 q# M/ d& q2 s9 s3 G2 i- K/ Midx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1); * [+ O4 C6 q: o, ~8 M
不放心的话,可以找个汉字,然后找到它的字模的偏移量,然后切出24个字节,再用这个工具看一下。
! G* e, |2 \( H9 Z( S
) y2 V+ \7 `: ]6 i9 c好,接下去说再解释一下这个任务。$ r( d. l$ d, T8 y- b3 R( N3 m+ H
原本16X12里的字模的样子都是没有重复的,现在我们要做一件事,我们要修改一个汉字的字模,比如说是"你"这个字,我们给它做个变脸手术,让它的样子长得和"我"这个字一样,其实就是找到"我"的字模的位置和"你"的字模的位置,把"我"的字模覆盖掉"你"的字模。. S( ^& j! @3 |5 q8 J  b! z/ G

$ e, r% a; y4 ~我们要求修改好多对"你"和"我",这个就在一个文本文件里定义,怎么定义其实是随便的。
作者: sspking    时间: 2009-6-6 12:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: shane007    时间: 2009-6-6 13:07
算偏移量是比较费脑子的,我记得好像高位低位要换一下。+ U! U6 Z* C7 i6 n- A" }
等我发现你哪里算错再告诉你。
作者: shane007    时间: 2009-6-6 13:43
引用第3楼sspking于2009-06-06 12:53发表的  :  Y) o- B. _2 l' \, P
不会算偏移量啊~  如方说‘新’字,GB码是 C2D05 D  J2 v& t0 n) U) r
然后 idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1)5 c0 x& I' @/ J- C/ c( D* o
我用VB ,那么就是a = ((a Mod 256) - &HA1) * 94 + ((a / 256) - &HA1)1 M/ F8 O: M, Y$ @
得到 FFFFAD4E   这肯定是错了~, e2 k( @# o2 }  A9 x' N, K& r" G
到底是哪里算错了?
: Q$ P. @6 {7 t4 ^$ m
这个索引是指这个汉字在字库中是第几个,所以你还要考虑每个汉字占用的字节数24,才能正确算出偏移量。
5 d4 o, z) U' T+ c4 Y6 s3 Y
( c$ o3 A* O  X* ?放上一个工具,可以看16X16的字库的偏移量,索引的计算方式相同。7 y. u0 X& h/ K. T; I
不同的只是一个汉字占用32个字节。1 F: h. G+ }+ O1 R0 q
你可以先学着算16X16的字库的偏移量,然后和这个工具对照。
: `+ T7 `2 r0 U, D' t然后就能算16X12的了。
作者: firendless    时间: 2009-6-6 14:31
引用第3楼sspking于2009-06-06 12:53发表的  :# ?0 s2 D, C/ N/ b" p+ H
不会算偏移量啊~  如方说‘新’字,GB码是 C2D0$ b( e  L9 q, T1 I
然后 idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1)
  l  A* W6 P) o+ Q$ u我用VB ,那么就是a = ((a Mod 256) - &HA1) * 94 + ((a / 256) - &HA1)
  d; T4 k$ n- ~5 E( W得到 FFFFAD4E   这肯定是错了~
8 d/ m$ j+ K7 Y  E0 X6 u到底是哪里算错了?
呵呵...补码
作者: firendless    时间: 2009-6-6 14:32
http://promiseforever.com/200904 ... rt-for-chinese.html3 x5 `1 a/ Q5 M$ x

7 B5 i; W9 [% X: g似乎不是很早前就做了么...
作者: shane007    时间: 2009-6-6 14:33
引用第6楼firendless于2009-06-06 14:31发表的  :
; V6 q9 j2 Z3 j) X
! U3 ~, x% s( H4 F4 z呵呵...补码
, O  C7 v- `; F. G5 X
你说详细一些。应该怎么样算才对。
作者: firendless    时间: 2009-6-6 14:36
考完试翻翻以前写的代码..忘记了...补码似乎是C入门的时候的一个概念...007老大不会不晓得的吧...
作者: shane007    时间: 2009-6-6 14:36
引用第7楼firendless于2009-06-06 14:32发表的  :
& ?6 a4 w1 r) _! f; v+ Khttp://promiseforever.com/200904 ... rt-for-chinese.html
* g/ k1 u. O3 ?2 J
/ D5 J4 d6 r; |( V; l4 j似乎不是很早前就做了么...

+ q) K) H4 [8 W7 b好像和这个任务有点不同。
作者: shane007    时间: 2009-6-6 14:38
引用第9楼firendless于2009-06-06 14:36发表的  :
$ U3 O& L: S& o1 o1 o' e5 c2 j1 o考完试翻翻以前写的代码..忘记了...补码似乎是C入门的时候的一个概念...007老大不会不晓得的吧...

- S) P3 K- y+ f' k% C- f% n& N我知道补码,不过不知道和这个任务有什么关系。
作者: firendless    时间: 2009-6-6 14:40
007老大可能着急了...又没看清楚我的回复...
作者: shane007    时间: 2009-6-6 14:41
引用第12楼firendless于2009-06-06 14:40发表的  :( G9 e1 C) Q1 d; @+ I
007老大可能着急了...又没看清楚我的回复...
* j( s1 f( X! I7 _) S
呵呵,才疏学浅,不是没看清,我是没看懂。
作者: firendless    时间: 2009-6-6 14:44
.....& ^# f2 V7 z/ a1 _) s, [
我回复的是他的计算问题,计算错误的原因是补码没有算...我去看考场了..
作者: shane007    时间: 2009-6-6 14:49
引用第14楼firendless于2009-06-06 14:44发表的  :
' O' t1 M! d0 e  }' f.....3 `0 m7 C: p, s$ Z
我回复的是他的计算问题,计算错误的原因是补码没有算...我去看考场了..

* Z7 t; G8 p1 i5 {7 R8 @; l祝你考试成功!
作者: firendless    时间: 2009-6-6 19:16
引用第3楼sspking于2009-06-06 12:53发表的  :
( I8 b& u0 n$ K7 K" z; w* e- ^不会算偏移量啊~  如方说‘新’字,GB码是 C2D03 j& B; Y7 Z/ i9 S' w4 k! ~
然后 idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1)  V7 _. u. Q; I# z) M( X
我用VB ,那么就是a = ((a Mod 256) - &HA1) * 94 + ((a / 256) - &HA1)$ i! u0 E2 P" S
得到 FFFFAD4E   这肯定是错了~
+ ]- {" N* z8 u4 o到底是哪里算错了?
8 R, R# R! G0 b, ^% V, G
应该说你压根就不对...VB直接一步就出来了
作者: firendless    时间: 2009-6-6 19:16
引用第15楼shane007于2009-06-06 14:49发表的  :
; J# Y1 j4 B! }' O% M4 `+ \8 z* R$ [  Q

# o0 O5 Z9 v. C, C7 s  E祝你考试成功!

* u% q3 w6 F* U/ I% Wthx~
作者: shane007    时间: 2010-4-19 22:58
顶上来




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