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

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

[复制链接]
查看: 574|回复: 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 编辑
1 A* T4 X( n0 N$ G& m, b
* @/ G) O2 R" v+ O8 w8 k; N7 X0 `这是一个opengl的游戏,当初发售的时候只有德文版,因为被人遗忘了,
7 K1 v7 x3 c. J& y/ I# R但目前已经有了英文补丁,因此汉化又被提上日程。
+ R1 z  j* B& g; n- t
6 k/ e! E4 [! j对opengl的调用主要是在toh.exe完成的,
% A9 }0 J+ o, X4 ]$ \6 u. a8 z对于opengl的游戏我们主要关注glGenLists和glCallList这2个函数( J$ M2 Y; T9 P# Q

6 ?9 G- ]* E8 ^) o  K& yglGenLists的调用处共有6处,每处都类似,
% x6 W2 }9 g0 F可见游戏初始化了6种字体,每种有256个字符。
4 Z" b3 a" v) ]4 ^其中一处代码如下。可以看见游戏创建了256个显示列表,并调用CreateFontA生成字符的材质。
3 \- W3 W) e) `2 ~: N5 B+ {修改的时候,应该还要修改到上层调用的其他函数。
. C) u( }: h1 I* k" w
  1. BOOL __cdecl sub_4518C0(HDC hdc)
    6 y/ F2 M5 {, w. u& E7 A
  2. {& p6 M% k, I3 B& Z: `* q
  3.   HFONT h; // [esp+4h] [ebp-8h]
    ( K* e3 X- v% R4 V9 W% C- F2 U! X+ y
  4.   DWORD iCharSet; // [esp+8h] [ebp-4h]: |. u; E0 Z" r

  5. " f4 [9 D' m8 `+ R! D
  6.   if ( dword_4A4490 <= 1252 )
    & _# g4 N; W: I
  7.   {# w! n$ s( I: R" m) F
  8.     if ( dword_4A4490 == 1252 )( O! M3 V7 f, l- b$ d2 U4 l
  9.     {
    " {' A) z# [+ q3 T  f. x
  10.       iCharSet = 1;( X2 {* J# l& d" a6 B* P3 o
  11.       goto LABEL_11;
    8 a7 d) ~# p+ |4 _8 W% W- Y
  12.     }
    % L0 _; `! d2 G
  13.     if ( dword_4A4490 != 1250 )) y: O. l7 I+ p+ {
  14.     {
    9 D) a/ P+ V8 R9 q
  15.       if ( dword_4A4490 == 1251 )/ f8 C0 k1 R2 G5 @  q8 {
  16.       {
    " v, @! Q5 y3 k8 j4 u6 z
  17.         iCharSet = 204;, `+ ]4 _8 O/ I% G% C. Q  m% a
  18.         goto LABEL_11;
    * _3 f- z6 p* E8 d2 H
  19.       }
    / ]- f& o& U4 S- t7 V; K
  20.       goto LABEL_10;
    . L0 Q+ `; ]7 I7 M
  21.     }
    # j; o6 b$ F3 Z& e
  22. LABEL_7:
    % b' T" p- ^5 o" R9 S$ g
  23.     iCharSet = 238;
    ' a' K; C, c: ^! O; ?
  24.     goto LABEL_11;9 V4 L8 U1 s; v# H+ r) }( I
  25.   }
    # o9 z, k# d" }, F: j9 p+ j0 W% T
  26.   if ( dword_4A4490 == 11250 )
    ! t7 h! L+ C  t, |2 S
  27.     goto LABEL_7;" ]  w7 R5 ?" J. K
  28. LABEL_10:
    + q$ T; s9 P5 y# R1 n4 u* J2 D
  29.   iCharSet = 1;
    - h& l' \4 n1 c* F3 S* }) ]3 [% j
  30. LABEL_11:* z5 t) ^* f1 ~
  31.   base = glGenLists(256);8 \& T* r  c3 D  r/ t
  32.   h = CreateFontA(-14, 8, 0, 0, 700, 0, 0, 0, iCharSet, 4u, 0, 4u, 0, pszFaceName);0 Z% n# {: ]) N
  33.   if ( !h )
    # _, u0 W. M" Q% m; t6 J) F' I8 h
  34.     MessageBoxA(0, aCannotCreateFo, aBuildfont, 0);2 n4 Z# `" D5 R$ c" g1 A
  35.   SelectObject(hdc, h);5 Z6 I( @" v$ }1 n! Z
  36.   return wglUseFontBitmapsA(hdc, 0, 0x100u, base);# H% p8 g4 }: s8 l! z3 d6 {& f
  37. }
复制代码
$ L5 p' O( F9 \9 A% V, h; o3 c" d

5 P9 t/ k- g! W$ BglCallLists调用的地方共有3处,8 Q/ |5 T# _3 c( x
这个函数就是游戏的显示函数,共有3个参数,  J# O6 z9 F8 }1 i- V
  1. void WINAPI glCallLists(- f  W7 Q: h. I! y) c& K
  2.     GLsizei n,
    ( ~  V& p7 `! g2 l6 x  E6 Z# p
  3.     GLenum type,2 j9 n( N$ u$ \1 O+ c# Y4 n4 a, t
  4.     const GLvoid *lists
    2 l% ]# r0 S( M) g% r
  5. );
复制代码

" T& l5 ]! N! j. ~+ Y: _# }
8 q2 t# P' o" n( `  其中n为字符串长度,type为字符串类型,*lists为字符串指针,
3 e- \% f/ C3 [  如果游戏在调用glCallLists时第二个参数使用了0x1400,即GL_BYTE,则表示单字节:
6 |7 E1 @# O, A( G& T4 G  需要修改为GL_UNSIGNED_SHORT,即0x1403。$ a+ }$ X! Q4 A

" e. K7 o# V* z3 v定义
( V5 b# v( a! J' q: t
  1. #define GL_BYTE                           0x1400
    % o8 z: W# d( B* N1 G1 }
  2. #define GL_UNSIGNED_BYTE                  0x1401
    6 K1 ?" j' ]+ L
  3. #define GL_SHORT                          0x1402& u! g; }+ ?4 a* o1 h
  4. #define GL_UNSIGNED_SHORT                 0x1403
    $ b' O$ F7 t; u, w3 o# X
  5. #define GL_INT                            0x1404- W8 k& l/ H7 A- _7 l* u+ |" Y
  6. #define GL_UNSIGNED_INT                   0x14051 `; d+ g" ?9 ?4 h4 }; \: G: ~1 q
  7. #define GL_FLOAT                          0x1406
    + ?8 e2 F) d5 i) r& B
  8. #define GL_2_BYTES                        0x1407
    / f8 u1 V& k8 B4 o8 E
  9. #define GL_3_BYTES                        0x1408! R% ^0 {7 B9 y) z. m2 M& m
  10. #define GL_4_BYTES                        0x14094 X8 j7 R% {3 C1 u1 C: \6 n- {1 v
  11. #define GL_DOUBLE                         0x140A
复制代码
  {7 v% D2 h% q: X) J! n2 k

0 z' n7 f! q0 Z0 C6 C5 B
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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