设为首页收藏本站官方微博

建议 【Opengl游戏汉化 #3】 魔法英雄历险记(Tale of a Hero)字幕显示函数 glCallLists

[复制链接]
查看: 632|回复: 1
打印 上一主题 下一主题

[建议] 【Opengl游戏汉化 #3】 魔法英雄历险记(Tale of a Hero)字幕显示函数 glCallLists

跳转到指定楼层
楼主
发表于 2023-8-27 10:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

【Opengl游戏汉化 #3】 魔法英雄历险记(Tale of a Hero)字幕显示函数 glCallLists

本帖最后由 shane007 于 2023-9-4 18:28 编辑
0 K, i, `5 c% R) p& p/ W. v
; K& k1 M  p* h% \5 h! r3 n3 F这是一个opengl的游戏,当初发售的时候只有德文版,因为被人遗忘了,
! K, w% P, Y3 s: ]. w, i* ]5 N但目前已经有了英文补丁,因此汉化又被提上日程。4 }5 Q" w1 r- M  x# P* x

- m# \9 s) Y( O! J: X+ s- u对opengl的调用主要是在toh.exe完成的,2 h2 f4 s8 @& x! c2 S
对于opengl的游戏我们主要关注glGenLists和glCallList这2个函数1 g5 M% e* _) J, m; }
3 V8 i* i; [1 N7 W' a+ B
glGenLists的调用处共有6处,每处都类似,, N3 I' d9 a1 P# w3 x
可见游戏初始化了6种字体,每种有256个字符。9 F0 r1 F6 [) f, l  V" l, ~: K
其中一处代码如下。可以看见游戏创建了256个显示列表,并调用CreateFontA生成字符的材质。
9 w$ v1 ?# I7 }5 e" g修改的时候,应该还要修改到上层调用的其他函数。
) N$ |) X0 o/ ]
  1. BOOL __cdecl sub_4518C0(HDC hdc)* t9 h9 p4 F" y5 a' k/ H+ H
  2. {
    ! @( w. U. W7 W+ G( P
  3.   HFONT h; // [esp+4h] [ebp-8h]# Y* a2 t0 A2 I( D/ P
  4.   DWORD iCharSet; // [esp+8h] [ebp-4h]
    5 s+ C5 k2 C. {% m3 i: I

  5. & ?1 ~) I, T6 O
  6.   if ( dword_4A4490 <= 1252 )9 M( z* }0 a5 ]0 {# ~
  7.   {
    0 B6 r( }6 V" }
  8.     if ( dword_4A4490 == 1252 )
    4 i8 L9 V/ y2 K, X9 u( x: D  T
  9.     {  E$ V$ O7 q/ r) v5 \) L
  10.       iCharSet = 1;. i0 K- A2 d' V2 h
  11.       goto LABEL_11;
    * o7 ~; e* S# K# K7 U1 w: G
  12.     }
    , J# {( L+ U* Z" h) l" y9 e
  13.     if ( dword_4A4490 != 1250 )+ h( q. V3 i: ^# k- [  E
  14.     {* R8 V) F$ S. h1 ~- f3 r# |
  15.       if ( dword_4A4490 == 1251 )
    0 y( {& r2 ~" g" k+ m
  16.       {) }$ y4 [* d6 |# X
  17.         iCharSet = 204;
    : p' R  d; s, A
  18.         goto LABEL_11;# u& J% _* C; H  x
  19.       }2 H0 |" s) z- P1 j5 ]0 c
  20.       goto LABEL_10;. b  P1 H/ q: {  w) d, G
  21.     }% U7 G. K0 ?! t
  22. LABEL_7:- v2 ?+ T' a# s8 o) g/ Z
  23.     iCharSet = 238;6 X. }% s2 X3 K# _) y
  24.     goto LABEL_11;. `( L6 T' C+ r
  25.   }
    0 R. H3 W6 o) G
  26.   if ( dword_4A4490 == 11250 )1 f) M9 B4 i" f- Q" o- }5 G6 u
  27.     goto LABEL_7;
    ; e1 P! B) ]# n) w
  28. LABEL_10:
    ) Z: m' Z- U6 V; ]- }/ x
  29.   iCharSet = 1;; d4 ~. k; @1 k+ N* t
  30. LABEL_11:
    9 A" ]  ^, s+ b$ w
  31.   base = glGenLists(256);
    3 r4 y* p0 c, ~9 p3 i
  32.   h = CreateFontA(-14, 8, 0, 0, 700, 0, 0, 0, iCharSet, 4u, 0, 4u, 0, pszFaceName);
    $ A9 l$ T; g! c+ Z9 v: ^
  33.   if ( !h )
    % u% ~0 d; m. {. o; m
  34.     MessageBoxA(0, aCannotCreateFo, aBuildfont, 0);
      B' N/ d) Z! {+ w" p) k2 s9 n( n
  35.   SelectObject(hdc, h);2 J0 h( h+ n: P/ z& z3 d9 x
  36.   return wglUseFontBitmapsA(hdc, 0, 0x100u, base);6 l; J! {3 [8 c. d9 Z: G
  37. }
复制代码

3 J% s3 H3 C3 @7 h# e  x
+ k# k' `( }% W; Q' ^  J0 oglCallLists调用的地方共有3处,, H. v0 G8 Z9 a: f9 h3 H
这个函数就是游戏的显示函数,共有3个参数,
7 p0 J. x9 Z4 _
  1. void WINAPI glCallLists(
    , r: N$ U: Z" j8 L
  2.     GLsizei n,
    ( h% v1 b4 u$ H& P
  3.     GLenum type,
    / K" n# u9 J+ T0 }* |0 V
  4.     const GLvoid *lists
    & |5 o5 H, w4 q7 N) L+ F2 _
  5. );
复制代码
7 d% U# h/ E# ?* c
( O# t& @* d; v* @; R4 f
  其中n为字符串长度,type为字符串类型,*lists为字符串指针,, A7 ~7 x4 Z  Y- h  C! u7 v
  如果游戏在调用glCallLists时第二个参数使用了0x1400,即GL_BYTE,则表示单字节:; b5 D5 V4 ^, ^- B4 M; J
  需要修改为GL_UNSIGNED_SHORT,即0x1403。4 T) _' g5 Y& t5 h1 {

8 ]) [9 P/ Q* P. O定义
! ?2 T7 B4 m' l/ j) E! p
  1. #define GL_BYTE                           0x1400
    ( @6 u. T; G( `$ @4 ]7 c* ?
  2. #define GL_UNSIGNED_BYTE                  0x14017 a! g0 G2 Y* X3 p- |
  3. #define GL_SHORT                          0x1402
    : Q' c: X) L" P5 l; Y3 D5 z( a- V
  4. #define GL_UNSIGNED_SHORT                 0x14032 m3 x5 _( \' Z+ C, I
  5. #define GL_INT                            0x1404
    & _5 z! d6 ^. V2 F% J
  6. #define GL_UNSIGNED_INT                   0x1405) ?1 I. o# t8 O9 V" F8 n; e
  7. #define GL_FLOAT                          0x1406
    8 v# z) V2 p0 ]) J
  8. #define GL_2_BYTES                        0x1407
    ' o( t* ]8 N& o1 y" d
  9. #define GL_3_BYTES                        0x1408$ ?9 q; e- Z  ?2 t0 i/ |
  10. #define GL_4_BYTES                        0x1409* ^: @* R8 W8 B+ `& H6 G1 A8 Z. ~
  11. #define GL_DOUBLE                         0x140A
复制代码

4 O2 v, k# x" n! Y+ R, `- \
  S" ~$ k# D2 N8 M: ^+ M. H# c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
 楼主| 发表于 2023-9-4 18:28 | 只看该作者
顶上来,顶上来
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表