冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2009-6-5 20:03
标题: 【汉化任务简报】#30 疾速天龙 字模置换程序
疾速天龙是一个可以用scummvm模拟器模拟的游戏8 d2 y, Q% q+ R1 m% C7 Z
但是在导入文本的时候,我们发现一些特定的文字无法被导入到文本中。
: R6 r; A9 B3 b$ r; _( Y: I+ [
& q- ^/ }2 @8 b3 P1 D我们采用修改字体文件中字形的方法,当我们需要输出文字A的时候,我们在文本中导入的是文字B,但是我们把文字B的样子修改为A。这样我们就能输出A了。8 M  Q: b! ?, d  g- N7 h1 z6 o/ w
7 \9 ?+ ^" {2 c" o& o$ }3 ?
字体文件在以下的帖子中,文件名是chinese_gb16x12.rar / `3 R0 L) X" V
https://www.chinaavg.com/read.php?tid=16790! c' H2 Y/ y( `% w6 _; k
7 W8 J4 w" c1 a6 L, I4 N" h7 ]
字体是16X12,所以每个字模占24个字节。
0 F7 Y4 _0 Q# S* LGB索引代码如下- m) g0 K1 [1 h* m( O8 T4 `
idx为GB232编码' J, ~% p" p5 {+ |
idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1); ; Q3 M5 |! R; c0 z0 S
8 I4 b: u3 |& _; M+ T
另外有一个要转换的文字的文件  W0 `. z2 X3 W  l; ?) {1 Y
每行2个字,就是把前一个字的字模样子转换为后一个字的字模样子的意思。
  W) |; u) r, P- C2 s- ^有若干行,循环即可。
作者: 肥牛    时间: 2009-6-5 23:53
这一句话没看懂:
, l( L9 }; H4 d! u1 n) `我们采用修改字体文件中字形的方法,当我们需要输出文字A的时候,我们在文本中导入的是文字B,但是我们把文字B的样子修改为A。这样我们就能输出A了。
8 o/ O. F. Z1 O5 [* E, E3 ~) K8 }: x0 o9 L/ i9 |8 d3 O4 h( n2 t
能不能举个例子?6 ~$ g: e4 h  y* @3 \
7 T$ e& v3 Y' O7 M. J4 D! `) _, x
还有这个“每行2个字,就是把前一个字的字模样子转换为后一个字的字模样子的意思。”,也请举个例子。
作者: shane007    时间: 2009-6-6 11:29
你可以先看一下下面这2个帖子.# Q$ Q; w. {5 f# Y
https://www.chinaavg.com/read.php?tid=16610# R; ~- o7 S5 q+ ?
https://www.chinaavg.com/read.php?tid=17017# v( F( [2 }8 ^1 e$ |5 `3 K- M7 m
( v" P& v+ v' ~2 ~1 C
你可以用这个工具先查看一下16X12字库,有个直观的概念。
9 g% U1 Z: G; L2 p* j) c( f% y; ~
我可以给你举个例子。不过只能用文字描述。
. U( }4 @5 u9 M% K字体文件中每24个字节保存了一个汉字的字模,一个挨一个连续存放。
, v4 p' j1 L. x- l; M根据汉字的编码找到该汉字字模的偏移量的公式我写了,是一下这个公式。& A$ {- M" |5 c" w
idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1);
& t2 {% Y- d! `* b+ Y. [! f不放心的话,可以找个汉字,然后找到它的字模的偏移量,然后切出24个字节,再用这个工具看一下。
" S7 P( |2 F9 x, r! r2 R6 [- W& d$ ~6 w% n  J" ]& g
好,接下去说再解释一下这个任务。4 ]. O2 O3 L: M& C
原本16X12里的字模的样子都是没有重复的,现在我们要做一件事,我们要修改一个汉字的字模,比如说是"你"这个字,我们给它做个变脸手术,让它的样子长得和"我"这个字一样,其实就是找到"我"的字模的位置和"你"的字模的位置,把"我"的字模覆盖掉"你"的字模。' h: A9 [5 ^$ l6 m0 t: @! o
4 w/ d$ \- b$ K
我们要求修改好多对"你"和"我",这个就在一个文本文件里定义,怎么定义其实是随便的。
作者: sspking    时间: 2009-6-6 12:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: shane007    时间: 2009-6-6 13:07
算偏移量是比较费脑子的,我记得好像高位低位要换一下。8 Y0 y9 l8 ], w8 A
等我发现你哪里算错再告诉你。
作者: shane007    时间: 2009-6-6 13:43
引用第3楼sspking于2009-06-06 12:53发表的  :
' J5 B/ e# I' e0 z1 q不会算偏移量啊~  如方说‘新’字,GB码是 C2D0
+ x  w4 q+ d8 _6 {# V然后 idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1)
8 g  ]7 n$ @4 h; {5 o' g: d# Q; J% ?; f我用VB ,那么就是a = ((a Mod 256) - &HA1) * 94 + ((a / 256) - &HA1)
9 `( }5 Q5 s# B8 [/ g( _得到 FFFFAD4E   这肯定是错了~
+ y7 J1 R3 b! f: Q" i到底是哪里算错了?
- L  F# H" S  G: T- I% d
这个索引是指这个汉字在字库中是第几个,所以你还要考虑每个汉字占用的字节数24,才能正确算出偏移量。# U; I" X' ~- \9 t
, ]  D" C6 |0 D$ [2 D
放上一个工具,可以看16X16的字库的偏移量,索引的计算方式相同。1 K% T  I$ L1 X! G% k5 v; \
不同的只是一个汉字占用32个字节。) [* q( M8 f' D8 b+ B, f2 L. G! x
你可以先学着算16X16的字库的偏移量,然后和这个工具对照。( ?. o8 D$ U4 j; m& L+ T7 n
然后就能算16X12的了。
作者: firendless    时间: 2009-6-6 14:31
引用第3楼sspking于2009-06-06 12:53发表的  :! W% o7 Z# t& q1 q) p' X
不会算偏移量啊~  如方说‘新’字,GB码是 C2D0
7 z% b' r* I4 z* t  o; \然后 idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1)0 h- Q$ T7 j9 T/ \' o3 u
我用VB ,那么就是a = ((a Mod 256) - &HA1) * 94 + ((a / 256) - &HA1)& m$ Z% d$ f4 Y& i0 n! X) h. {
得到 FFFFAD4E   这肯定是错了~
1 N7 g' a1 j5 W到底是哪里算错了?
呵呵...补码
作者: firendless    时间: 2009-6-6 14:32
http://promiseforever.com/200904 ... rt-for-chinese.html; o; }$ ~) o# E. w
' d$ I1 M3 `# u' `: i+ h
似乎不是很早前就做了么...
作者: shane007    时间: 2009-6-6 14:33
引用第6楼firendless于2009-06-06 14:31发表的  :
' L9 E7 D0 ?* Q) I/ a* S: h* a# \! ?- Y1 D$ c$ I
呵呵...补码
; U  B5 `2 I  W7 Y0 \( A
你说详细一些。应该怎么样算才对。
作者: firendless    时间: 2009-6-6 14:36
考完试翻翻以前写的代码..忘记了...补码似乎是C入门的时候的一个概念...007老大不会不晓得的吧...
作者: shane007    时间: 2009-6-6 14:36
引用第7楼firendless于2009-06-06 14:32发表的  :% l  A2 A. M( u
http://promiseforever.com/200904 ... rt-for-chinese.html9 h& G5 f0 T" k! L* G9 z
9 V4 ~7 N& Y; _, J$ U# x
似乎不是很早前就做了么...

7 ]; y3 g' G/ R! j好像和这个任务有点不同。
作者: shane007    时间: 2009-6-6 14:38
引用第9楼firendless于2009-06-06 14:36发表的  :
' y( [8 X- Z" h: w考完试翻翻以前写的代码..忘记了...补码似乎是C入门的时候的一个概念...007老大不会不晓得的吧...
. S/ K! D7 w& E
我知道补码,不过不知道和这个任务有什么关系。
作者: firendless    时间: 2009-6-6 14:40
007老大可能着急了...又没看清楚我的回复...
作者: shane007    时间: 2009-6-6 14:41
引用第12楼firendless于2009-06-06 14:40发表的  :
! B- c* g! b' q7 O. f007老大可能着急了...又没看清楚我的回复...
/ j5 a+ K; ~+ E' M, j
呵呵,才疏学浅,不是没看清,我是没看懂。
作者: firendless    时间: 2009-6-6 14:44
.....
( g! z4 v" R1 r! C我回复的是他的计算问题,计算错误的原因是补码没有算...我去看考场了..
作者: shane007    时间: 2009-6-6 14:49
引用第14楼firendless于2009-06-06 14:44发表的  :
0 ^" {' f% o/ l% v7 A7 g' P/ C.....7 r. [. Y/ X. W/ B' P
我回复的是他的计算问题,计算错误的原因是补码没有算...我去看考场了..
& v+ n! u$ W4 L' @9 {! Y3 q) Q2 [
祝你考试成功!
作者: firendless    时间: 2009-6-6 19:16
引用第3楼sspking于2009-06-06 12:53发表的  :
' r1 u* F: C( P1 k% i7 t8 ~不会算偏移量啊~  如方说‘新’字,GB码是 C2D0
$ y& g  q; |' ~然后 idx = ((idx % 256) - 0xa1)* 94  + ((idx / 256) - 0xa1)0 C+ E) S; e: I3 G6 `+ o2 f) A* z
我用VB ,那么就是a = ((a Mod 256) - &HA1) * 94 + ((a / 256) - &HA1)
* R  l5 k* F+ D; _8 M, y+ o得到 FFFFAD4E   这肯定是错了~9 k# r7 H; G* S0 {
到底是哪里算错了?

$ m1 ~4 o, `$ Q$ f3 ^' [应该说你压根就不对...VB直接一步就出来了
作者: firendless    时间: 2009-6-6 19:16
引用第15楼shane007于2009-06-06 14:49发表的  :
& m3 |: |% R8 c4 ?( }+ b% Z2 D, O

: s& Q' K9 U1 `7 N祝你考试成功!
; I2 A$ W" o% B- x
thx~
作者: shane007    时间: 2010-4-19 22:58
顶上来




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