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

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

[复制链接]
查看: 709|回复: 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 编辑 : r/ ]% V8 Y8 x3 e) n$ U

2 h! C  [' h) v1 E) q这是一个opengl的游戏,当初发售的时候只有德文版,因为被人遗忘了," {: `2 D) \8 Y; E+ r$ n
但目前已经有了英文补丁,因此汉化又被提上日程。
( A2 f. D: e! B2 G) G
$ r) o$ R% Q: j3 P( a* s8 w对opengl的调用主要是在toh.exe完成的,
; [" u! _4 ^' r! g$ w& s对于opengl的游戏我们主要关注glGenLists和glCallList这2个函数5 W( {- M  g# I

* S- j- [. w& [: _6 vglGenLists的调用处共有6处,每处都类似,
/ w1 t8 P3 d- v  F可见游戏初始化了6种字体,每种有256个字符。) |: q  W1 o2 m1 |
其中一处代码如下。可以看见游戏创建了256个显示列表,并调用CreateFontA生成字符的材质。. o+ I) i& B. F& Q
修改的时候,应该还要修改到上层调用的其他函数。6 u/ H% L  e( G) |; a
  1. BOOL __cdecl sub_4518C0(HDC hdc)
    : r, w7 \3 e7 H* g2 _! O+ |
  2. {, o9 O% w9 ~' ~& A, M, R1 q5 [! X
  3.   HFONT h; // [esp+4h] [ebp-8h]
    0 x% Y8 Y( y  `( o& m) R( V4 ^! ~
  4.   DWORD iCharSet; // [esp+8h] [ebp-4h]
    & o( T8 c2 y( a. @! B% b
  5. 0 C! W+ Z6 B' D
  6.   if ( dword_4A4490 <= 1252 )
    7 _- O* x+ L* X8 S
  7.   {. J, }  h1 B* _( m/ v
  8.     if ( dword_4A4490 == 1252 )
    ; ]8 L# O4 C. s5 P0 X) K
  9.     {
    2 w! T& i% o5 F" p. \" f
  10.       iCharSet = 1;
    0 y4 B5 a3 m* e- ?0 s$ `
  11.       goto LABEL_11;3 I% x& w* q/ A+ h
  12.     }
    # R  Q" f. {7 G: ~/ m6 I
  13.     if ( dword_4A4490 != 1250 )
    6 H; F$ w4 X8 h7 r9 m
  14.     {+ @- K" M! W- b& U) B1 a  Y
  15.       if ( dword_4A4490 == 1251 )4 [8 m) G  ?* h7 _! _8 V, `. v
  16.       {
    6 ^4 c  _' L$ `" Z/ U: E2 [
  17.         iCharSet = 204;1 d$ g3 I, b% ~
  18.         goto LABEL_11;
    ( a) V; Z- I7 {+ t7 O
  19.       }% [# n3 V5 ?5 Y0 @3 Z& X* u
  20.       goto LABEL_10;
    ( k! J. s& |; a* t3 ?3 _6 C/ i) f2 R
  21.     }$ B( w% v, M+ H$ ~
  22. LABEL_7:
    & p8 J5 S2 p2 c7 w
  23.     iCharSet = 238;- o% ]2 ~  f0 a$ n) H% g0 z
  24.     goto LABEL_11;$ `1 ?  C4 K6 o) u
  25.   }$ W4 T) Q  q9 F% @: @, O
  26.   if ( dword_4A4490 == 11250 )0 K% t! W, U+ Z) w) Y/ [
  27.     goto LABEL_7;
    + i+ M& T) l. o
  28. LABEL_10:
    8 ^  P: n( M9 f. x# N2 S& {1 K
  29.   iCharSet = 1;  A  x8 y8 `& X( J/ Z: q0 ]$ l  n
  30. LABEL_11:
    1 V/ x) |1 v- c( y) @
  31.   base = glGenLists(256);
    2 m0 ?3 l& F6 s: Y$ l0 }
  32.   h = CreateFontA(-14, 8, 0, 0, 700, 0, 0, 0, iCharSet, 4u, 0, 4u, 0, pszFaceName);2 M; W5 h- K8 I% W
  33.   if ( !h )
    ) o8 X) M# h% ]+ O" t
  34.     MessageBoxA(0, aCannotCreateFo, aBuildfont, 0);
    " H5 D. h* }! G' p9 U( U
  35.   SelectObject(hdc, h);, d3 f4 ?; W! W
  36.   return wglUseFontBitmapsA(hdc, 0, 0x100u, base);  R5 Z. m) e5 Y2 T
  37. }
复制代码
& W2 B0 q, b8 e; D3 P# ?
7 Q8 t; I' C) _! M
glCallLists调用的地方共有3处,
# i8 Q) L5 s1 ]% C) z% M这个函数就是游戏的显示函数,共有3个参数,/ P/ G8 x; @1 V4 e% W
  1. void WINAPI glCallLists($ y- ^9 R: @% H- _
  2.     GLsizei n,3 F! `! a) h5 {' S* n# L& ?
  3.     GLenum type,; c4 d5 ~' @3 |. a
  4.     const GLvoid *lists( D+ }8 r% z4 C+ ^8 F# _
  5. );
复制代码
& [; `  Q# ^! d2 Z6 w; }7 b
% z) X8 g6 |6 i: x% Q* e
  其中n为字符串长度,type为字符串类型,*lists为字符串指针,
/ v2 B. q& e% c5 s6 O: ]9 C  如果游戏在调用glCallLists时第二个参数使用了0x1400,即GL_BYTE,则表示单字节:
; v5 B5 g* b. z7 {6 y  需要修改为GL_UNSIGNED_SHORT,即0x1403。9 z  `6 o& x1 u' f( w
6 G# O0 j& r7 o6 R; B* E
定义$ D- l2 Z8 D- _
  1. #define GL_BYTE                           0x1400
    . u+ a, d3 O& e% A
  2. #define GL_UNSIGNED_BYTE                  0x1401
    # K) J8 _8 N; ~0 c
  3. #define GL_SHORT                          0x1402
    % C( M$ D3 w, C+ X5 [5 E
  4. #define GL_UNSIGNED_SHORT                 0x14031 s0 U+ F) k& E2 M# t7 r
  5. #define GL_INT                            0x1404# T  A/ X$ ]0 j) F# p
  6. #define GL_UNSIGNED_INT                   0x1405) ~1 s. D" R1 L# U% p
  7. #define GL_FLOAT                          0x1406
    7 p  t5 z; Q. q5 ^! w0 U& g. L" K) H
  8. #define GL_2_BYTES                        0x1407# f# b( K% v2 i  s4 u$ `
  9. #define GL_3_BYTES                        0x1408
    + Q0 _4 i% G0 X7 E& u, A, I2 E
  10. #define GL_4_BYTES                        0x1409
    8 v( B/ A9 n1 s* i* X$ m, ^
  11. #define GL_DOUBLE                         0x140A
复制代码
+ m5 j. [* {/ P' Z' k9 L
; O# M* p( I. W- h" G2 x; [3 {
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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