冒险解谜游戏中文网 ChinaAVG

标题: 【Opengl游戏汉化 #4】 惊恐鬼屋导演剪辑版(Scratches Directors Cut)字幕显... [打印本页]

作者: shane007    时间: 2023-8-27 11:17
标题: 【Opengl游戏汉化 #4】 惊恐鬼屋导演剪辑版(Scratches Directors Cut)字幕显...
本帖最后由 shane007 于 2023-9-4 18:48 编辑
, r. o, i, Q3 s5 z% t  t7 ~* `
5 S  k& s1 e6 y: z这是个opengl引擎的游戏,对opengl的初始化是在scream.exe里边完成的。' h- _$ J) d; w  Y9 i; `  ~2 s* E
对于opengl的游戏我们主要关注glGenLists和glCallList这2个函数4 D: O# L  ^0 ]9 X" c# ?, s' A! i

* S3 j6 F; j5 q% |/ Y- n1 g) T8 ^, t
glGenLists的调用有4处,前3处参数为1,应该不是。( N) J. O! ]  J) u5 ]& J
一下是第四处代码,这里应该就是生成字体的地方。
# c( K- h8 H" m; h从代码里可以看出,字体材质长宽各是16各字符,共256个字符,此处要修改。  t( \! ]: [) J7 T4 [
  1. int sub_40BEB0()
    ) ^- j& Z% l+ ?- p) @
  2. {7 D1 V9 a3 N  @& a& K
  3.   signed int v0; // ebx
    4 q& i6 g% h; o+ z$ b( O
  4.   int v1; // ecx+ r1 i: l3 w, d) H& W  O& ?$ ^; k
  5.   float v2; // ST18_4. `2 [" W! [: q( O# [% N
  6.   float v3; // ST1C_4
    % ^- T2 l* ?$ t9 u
  7.   float v4; // ST20_48 }9 d* b8 a4 S
  8.   float v5; // ST24_42 N/ Q2 g8 @5 j2 _
  9.   int result; // eax
    4 K: Q" K: w) s
  10. 0 u* W+ L7 l" m8 E7 c+ V
  11.   v0 = 0;
    ( M# P5 Y0 T; Y- X6 v" g
  12.   dword_4DF5130 = glGenLists(272);
      M  x# ?* w0 U/ u5 O: e1 F
  13.   do3 M. j7 J% x, u8 N. @4 o
  14.   {% y6 P" ~4 n( `. d% Q
  15.     v2 = (double)(v0 % -16) * flt_483450;
    : @, I7 R, d- E( d$ v$ M7 b
  16.     v3 = (double)(v0 / 16) * flt_483450;* u" y. o1 p" l
  17.     glNewList(v1, v0 % 16, v0 + dword_4DF5130, 4864);5 F3 _. i7 F! J# u
  18.     glBegin(7);4 ^  p8 w2 y" A* `
  19.     glTexCoord2f(LODWORD(v2), LODWORD(v3));0 Z6 L, i# i6 H& ^
  20.     glVertex2i(0, 0);
    # x8 G: f, H# N: R7 ~% B7 C; C8 T
  21.     v4 = v2 + flt_483450;; S9 z2 R$ q# l. r7 _
  22.     glTexCoord2f(LODWORD(v4), LODWORD(v3));
    ) j  v( P: z2 n* z. H- C
  23.     glVertex2i(16, 0);
    3 c2 p. |$ d2 B' F
  24.     v5 = v3 + flt_483454;
    6 _# }9 D/ a, ]" q) ?8 D  }2 F
  25.     glTexCoord2f(LODWORD(v4), LODWORD(v5));
    # r$ I8 _, P+ p: W8 F. a; e+ e
  26.     glVertex2i(16, 16);
    ' o; M; R) Z* E
  27.     glTexCoord2f(LODWORD(v2), LODWORD(v5));
    8 F2 x5 z0 b& B% ]: p: C* m7 A* b
  28.     glVertex2i(0, 16);+ T8 T( |# ?1 f& z/ m) C% z
  29.     glEnd();9 b" L% j6 Y  R9 ?1 x5 C0 t0 Y
  30.     ++v0;
    " m: @3 z" {. o# J' A/ V' s
  31.     glTranslated(0, 1076101120, 0, 0, 0, 0);
    5 q! _/ ]1 w  n, O
  32.     result = glEndList();
    $ G) B$ {% m6 m6 L3 u0 |$ ?6 x
  33.   }
    - a: g! g: _1 Q. P/ n+ u" d0 o: v1 [
  34.   while ( v0 < 272 );3 g% z% C/ j% C' {" `) t+ Y! J! v
  35.   return result;% O) k% U# r7 S; P
  36. }
复制代码

/ G0 d! Y% v. E+ E
# b, v" g# S" ?: g* v! V对glCallList的调用只有以下一处,' u1 J4 \' E0 F3 f7 G6 D0 H6 a7 K
这是显示单个字符还是字符串的方法,待以后再确认。
% ]- v2 L" O$ ]( Z glCallLists(strlen(&v7), 5121, &v7);
) l! k1 n, R9 u% r3 V4 o5121为0x1401 ,即 GL_UNSIGNED_BYTE ,是单字节。
# m3 s  P1 n. x0 t* F$ a# t4 ?1 r& |- y# q
  1. #define GL_BYTE                           0x1400
    ! t1 D- U! J- E4 I. a. k
  2. #define GL_UNSIGNED_BYTE                  0x1401) k8 J6 [! L6 Q
  3. #define GL_SHORT                          0x1402/ q9 a4 o: s6 _7 K+ j
  4. #define GL_UNSIGNED_SHORT                 0x1403
      i+ O3 f9 X8 `- V& K$ I
  5. #define GL_INT                            0x1404* `. a7 t3 [  Y3 y7 X1 A
  6. #define GL_UNSIGNED_INT                   0x1405
    7 P! T' l3 w0 o" ?1 J4 S
  7. #define GL_FLOAT                          0x14064 i2 [9 M/ \- V* N" D
  8. #define GL_2_BYTES                        0x1407
    1 h+ H& Y, n  n" Y1 j# M
  9. #define GL_3_BYTES                        0x1408# w* _/ g0 Y8 E* A4 |
  10. #define GL_4_BYTES                        0x1409
    0 n& N$ y, ?$ {5 c* P
  11. #define GL_DOUBLE                         0x140A
复制代码

, j6 _5 x3 Q  q7 C! d" @* e$ P# T6 Q2 V. Q' B7 S
  1. / n) s4 O: `& ?: i
  2. int __cdecl sub_40BFD0(signed int a1, int a2, int a3, int a4, char a5)$ ]+ E$ u1 v7 e% X( Z
  3. {8 ?# [6 ~" e$ G! ^* l
  4.   int v5; // ecx. F) O- w8 s0 F' y  s# s
  5.   int result; // eax
    ' i$ y. A9 {) W3 Y9 n
  6.   char v7; // [esp+18h] [ebp-118h]8 R! J, b$ ^2 R2 c* p( E, D
  7.   char *v8; // [esp+118h] [ebp-18h]
    - `* u9 J" f  c5 L1 v6 ^& e
  8.   int v9; // [esp+11Ch] [ebp-14h]6 C; T% F$ ]" X9 ?
  9.   int v10; // [esp+128h] [ebp-8h]) Y1 _: L1 l7 w$ K1 E1 ~& J  B
  10.   g6 m+ L5 j" f1 I/ _
  11.   v10 = v5;) o/ v/ q- a& K$ ~/ x
  12.   if ( a4 )
    . ^' {& G0 b8 ?
  13.   {
    5 K' F: W- r# Y9 T* w- f4 M
  14.     v8 = &a5;$ s4 S0 i! S; _
  15.     sub_41BA00(v5, a4);
    ( P) N6 L( x  G+ ~$ t+ D; T. Q
  16.     v8 = 0;
    1 ?4 G* a# ?. g. {# V$ o: Y& r
  17.     glBlendFunc(770, 771);& j# \  P' y( j
  18.     glBindTexture(3553, dword_4DF3BC4[8 * a3]);
    % t3 ]8 w* h' T. [
  19.     glPushMatrix();
    ; m+ V! D* N1 j( h6 c
  20.     glLoadIdentity();; B( G* }% f' H. _$ M# }3 r
  21.     v9 = a1;
    3 u6 H5 W. U/ l$ L' t# u
  22.     glTranslated(
    5 h& z! q! {5 E  Z' M1 o5 N
  23.       COERCE_UNSIGNED_INT64((double)a1),
    # _) ?: T) |1 b$ k( t
  24.       COERCE_UNSIGNED_INT64((double)a1) >> 32,: r- Q& O$ R4 ?* W3 e2 T
  25.       COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)),
    # U6 R* X4 G# M( e7 k
  26.       COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)) >> 32,
    . ~# d) I$ p9 r# T0 Y
  27.       0,  }) g! O5 D4 n
  28.       0);4 b1 N$ W5 I, M5 i% z: {1 ~
  29.     glPushAttrib(0x20000);
    2 f( Y/ I4 q4 O: w* `$ |
  30.     glListBase(dword_4DF5130 + 16);1 h1 R5 k! H1 x! ?% D
  31.     glCallLists(strlen(&v7), 5121, &v7);
    1 k+ B$ q9 a; y
  32.     glPopAttrib();' K0 Q8 m" ?" ^1 q) a; l* C
  33.     result = glPopMatrix();
    $ Y; _; n: F8 I
  34.   }  Y9 E0 w% G, g4 W& z
  35.   return result;
    / X# d' a* W6 m5 J
  36. }
    $ r; B4 F, h+ A, B. Y5 b$ J
复制代码
  X" E* W/ K- ^6 z7 ~; \

& e  ^; ?6 u5 x5 ^3 F
: D6 x* w7 V4 o; x7 ]
作者: shane007    时间: 2023-9-4 18:49
顶上来,顶上来




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