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

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

[复制链接]
查看: 393|回复: 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 编辑
. v4 o3 T. X$ h0 |( z" B; I  P# t9 F& {; S0 P3 M. B" c+ {0 B* c; Q( i
这是一个opengl的游戏,当初发售的时候只有德文版,因为被人遗忘了,# t% A+ Y5 _' t  Q& x  u, E2 x, i* q5 {
但目前已经有了英文补丁,因此汉化又被提上日程。
' D+ w3 U, g+ g
0 q9 g- b# m, a8 N: h: W* J# ]对opengl的调用主要是在toh.exe完成的,! X& d: D! C. Q6 m  {3 ]
对于opengl的游戏我们主要关注glGenLists和glCallList这2个函数
1 E! T  s  p% n- w
6 t' i6 L. h* Q0 p  |$ D- ]8 iglGenLists的调用处共有6处,每处都类似,
4 K# {" q3 G( Z4 v( c3 [可见游戏初始化了6种字体,每种有256个字符。
; B3 e3 a( B' u. Q) f其中一处代码如下。可以看见游戏创建了256个显示列表,并调用CreateFontA生成字符的材质。7 |- M: U8 A' d3 \) P- T# K' ~
修改的时候,应该还要修改到上层调用的其他函数。
0 d( }6 ?( p& [7 D/ }2 W$ E3 r) L
  1. BOOL __cdecl sub_4518C0(HDC hdc)( I- A7 Q) ]  Y- Y9 v
  2. {
    / q! a* {* v! {" D
  3.   HFONT h; // [esp+4h] [ebp-8h]2 X5 u" x# e# u  W( h1 `. }
  4.   DWORD iCharSet; // [esp+8h] [ebp-4h]
    4 T2 t  m7 b& f

  5. - t& _( J8 Z7 \. t% v& s! F
  6.   if ( dword_4A4490 <= 1252 )
    2 {4 G9 i8 `2 j8 V) c
  7.   {
    % i4 j3 t9 w! V+ O4 y
  8.     if ( dword_4A4490 == 1252 )5 ~. U1 r! E4 ?3 }% E. b
  9.     {
    0 S8 U8 e0 T, ~" H3 _/ W" a. @
  10.       iCharSet = 1;8 S/ Z# S  b4 R, e8 k
  11.       goto LABEL_11;
    ( I  C1 k4 {9 R7 C, S" L* p7 Q
  12.     }3 s6 D' g! i! f( l( ]
  13.     if ( dword_4A4490 != 1250 )
    : P* i' U) D+ H& q# r
  14.     {
    ; l; [2 L/ v, q, X: Q, G
  15.       if ( dword_4A4490 == 1251 ); l( s* G9 _! N4 ]9 `' t: L
  16.       {2 G7 E5 `; U+ s! {; E5 }/ Y* C
  17.         iCharSet = 204;
    5 ?% G1 t4 `4 ^% {& n2 D% H# z
  18.         goto LABEL_11;
    # ?# X$ v  r' X( M
  19.       }' S8 w3 [* _) @2 _" |5 \
  20.       goto LABEL_10;
    2 I) X3 r( D- q  f
  21.     }
    . h- n) ]+ y( a% Q9 ]# i
  22. LABEL_7:# @) Y; N3 p0 T7 m1 L' ^
  23.     iCharSet = 238;
    6 U% w- a, m$ K
  24.     goto LABEL_11;
      e# D) O3 r0 Q- H% f9 x
  25.   }
    1 P2 V/ K5 F# ]8 O- F
  26.   if ( dword_4A4490 == 11250 )! P% x0 n* J- R  j; ^
  27.     goto LABEL_7;
    9 \. a$ [6 Y' O2 M) y: Q& r2 I: J
  28. LABEL_10:
    * n( m, U8 j" B" u- D* k0 T
  29.   iCharSet = 1;% ~! _$ z: }/ |
  30. LABEL_11:
    ' {2 w) X; W9 Q# u
  31.   base = glGenLists(256);% o! I( @/ P, _/ ^
  32.   h = CreateFontA(-14, 8, 0, 0, 700, 0, 0, 0, iCharSet, 4u, 0, 4u, 0, pszFaceName);$ q. B' ~- M! H; L" p" j6 y
  33.   if ( !h )
    % e' Q6 @& N$ }+ q) w" s
  34.     MessageBoxA(0, aCannotCreateFo, aBuildfont, 0);
    ! Y% b8 _7 C% J! S
  35.   SelectObject(hdc, h);  x( k3 n& j& w0 x8 ^6 u* o
  36.   return wglUseFontBitmapsA(hdc, 0, 0x100u, base);
    " K, q+ `, S5 K/ v$ z
  37. }
复制代码

6 Z; `* j) q: m) i" N# P, n
/ P4 W3 C0 }/ T& ~# R4 s- M& uglCallLists调用的地方共有3处,
7 B+ p+ h4 w! O8 d5 {9 A这个函数就是游戏的显示函数,共有3个参数,
9 I8 M) k( o- t2 f( p3 v
  1. void WINAPI glCallLists(
    ! ^5 [% y- }3 ?
  2.     GLsizei n,
    + h6 q1 V2 r2 a% L' U  p
  3.     GLenum type,
    3 a( Z% p$ M  _4 e; H1 D6 b
  4.     const GLvoid *lists0 U" l! T2 p* n' _
  5. );
复制代码
! M( ]6 q) m8 q

/ G1 J( x9 l2 ^& n, r  其中n为字符串长度,type为字符串类型,*lists为字符串指针,* ^' w+ g4 N1 x; r
  如果游戏在调用glCallLists时第二个参数使用了0x1400,即GL_BYTE,则表示单字节:$ n, M" }, K5 g6 M. I4 p% A
  需要修改为GL_UNSIGNED_SHORT,即0x1403。% g3 o) @# I& A- H$ u; `
7 H$ w7 w4 y% d
定义' M" v) G) l( W% k' ?/ D. S
  1. #define GL_BYTE                           0x1400& x1 u( X1 A+ z4 R# t1 f& O  e
  2. #define GL_UNSIGNED_BYTE                  0x1401* N8 D) U0 o/ A6 `9 Z
  3. #define GL_SHORT                          0x1402
    ' ?; B& U7 {. a3 e6 X$ b
  4. #define GL_UNSIGNED_SHORT                 0x1403+ g4 @; o3 Y: V$ ]+ t; O; _0 U
  5. #define GL_INT                            0x1404& f, K& K$ z( Z0 \, ~. B
  6. #define GL_UNSIGNED_INT                   0x14053 ~" m2 j8 \! T% V3 N
  7. #define GL_FLOAT                          0x1406& t3 b" o8 V9 f) N" G
  8. #define GL_2_BYTES                        0x1407
    " g9 X( ?6 D) }, ~! L
  9. #define GL_3_BYTES                        0x1408+ E0 N( O, p3 \- ?  R
  10. #define GL_4_BYTES                        0x1409
    ; v! P( q5 H) Z' Y/ y* t# c
  11. #define GL_DOUBLE                         0x140A
复制代码

% l1 m# a% W7 `& K5 L- t- p. m4 U. |1 y
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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