冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2023-8-27 11:17
标题: 【Opengl游戏汉化 #4】 惊恐鬼屋导演剪辑版(Scratches Directors Cut)字幕显...
本帖最后由 shane007 于 2023-9-4 18:48 编辑
" s% T$ I8 H- m
! Q9 M, H( e8 c这是个opengl引擎的游戏,对opengl的初始化是在scream.exe里边完成的。
2 S+ I3 d" S/ v8 N9 P0 h对于opengl的游戏我们主要关注glGenLists和glCallList这2个函数9 m3 \9 G4 @0 H' j; @, C* j
, s! w6 @, _& B+ \1 m7 Z

; u; l6 i* v9 j  M4 yglGenLists的调用有4处,前3处参数为1,应该不是。
$ z( t7 t! Q: F* [5 y# Q, {% ^# M/ a- |一下是第四处代码,这里应该就是生成字体的地方。
4 g: w3 N  C; U  ]" B& O( g8 q从代码里可以看出,字体材质长宽各是16各字符,共256个字符,此处要修改。* }! V3 M" j, t6 N$ P
  1. int sub_40BEB0()
    ' v5 i) E; v# z5 _+ n9 x2 ?* ?- M4 Y
  2. {! r3 o, P3 E6 s: v1 w' m4 S6 M1 D
  3.   signed int v0; // ebx
    6 C, ~, p/ p3 c. P
  4.   int v1; // ecx
    & s! z3 u4 E4 W: u% d0 A
  5.   float v2; // ST18_4
    2 B8 {0 h" T2 T
  6.   float v3; // ST1C_45 M2 Z, F( X) r
  7.   float v4; // ST20_4# `* R( r$ c. L4 B* ?' e
  8.   float v5; // ST24_4
    8 T8 m5 K3 ?3 Y: S
  9.   int result; // eax
    : v) z% U) c8 p9 R7 {( c

  10. 8 k& ]' q" s8 b  y( d
  11.   v0 = 0;
    ' s: [  y7 X% o' S
  12.   dword_4DF5130 = glGenLists(272);% p9 m/ P* m& H$ l
  13.   do. H- \) U# s9 W2 C. c* }
  14.   {6 n4 A& R' r0 N$ ]7 d
  15.     v2 = (double)(v0 % -16) * flt_483450;) M. d# x: g! t+ Q8 y. s. p6 H
  16.     v3 = (double)(v0 / 16) * flt_483450;
    * M* x0 Z/ H: u
  17.     glNewList(v1, v0 % 16, v0 + dword_4DF5130, 4864);
    ) B6 z0 H& _) e2 z& S9 B) C- J
  18.     glBegin(7);  q, o# ~2 M/ f  m& Q- z
  19.     glTexCoord2f(LODWORD(v2), LODWORD(v3));" V# k  q; J/ e) @- S8 m- P) }
  20.     glVertex2i(0, 0);$ {" X! e! V: C9 }  A' b- E( q
  21.     v4 = v2 + flt_483450;
    3 t. a( {2 [8 a6 H) w3 G) E
  22.     glTexCoord2f(LODWORD(v4), LODWORD(v3));
    0 x% m+ H* a: e% z( ?+ j* a, l- @$ p
  23.     glVertex2i(16, 0);
    / b+ d1 x; t; q: w; j4 S
  24.     v5 = v3 + flt_483454;
    . N9 S5 C  z( h5 J: y2 C" C
  25.     glTexCoord2f(LODWORD(v4), LODWORD(v5));
    7 O" O# N. k3 S  S+ F  J
  26.     glVertex2i(16, 16);6 ~  p' W2 X' O. ?6 F6 _* F. d
  27.     glTexCoord2f(LODWORD(v2), LODWORD(v5));% Z- i. Q" z) |  D+ a
  28.     glVertex2i(0, 16);) X& F- w; y+ h
  29.     glEnd();, ?) j& J$ p* e2 r; d; Y
  30.     ++v0;, D+ z. J0 @: @% H: x
  31.     glTranslated(0, 1076101120, 0, 0, 0, 0);1 |' }# l. O8 G5 C* S
  32.     result = glEndList();! l) }( O9 [6 y/ f  N
  33.   }! o, n+ a) D' [+ c4 b* f2 Y: B
  34.   while ( v0 < 272 );
    & B! |; y& b) }
  35.   return result;* z3 y/ I1 p/ W5 ^& O* G
  36. }
复制代码

; {4 \9 Q$ k( j6 u5 @: l9 X7 L7 S
2 }: J- r% d0 @* L- A0 r对glCallList的调用只有以下一处,# S8 Q9 F# o* F5 R: b) f
这是显示单个字符还是字符串的方法,待以后再确认。& e6 H7 l5 `$ D2 e6 b% }
glCallLists(strlen(&v7), 5121, &v7);& z/ E  T3 c3 x; H. }
5121为0x1401 ,即 GL_UNSIGNED_BYTE ,是单字节。% f: E) }) @6 b& m

9 t7 o( P, h" b6 B1 }# P& n: h
  1. #define GL_BYTE                           0x1400: s  u1 ~2 p5 I7 i
  2. #define GL_UNSIGNED_BYTE                  0x1401
    + @$ }9 ~8 b" J/ g0 `
  3. #define GL_SHORT                          0x1402
    1 Z: d7 ~, G# S8 X# S8 N, h
  4. #define GL_UNSIGNED_SHORT                 0x14039 Z- @% D' b6 O8 T; ^. r+ ~' I5 A; @
  5. #define GL_INT                            0x1404
    2 {3 w5 m( r# h* T
  6. #define GL_UNSIGNED_INT                   0x14053 E% u- E6 Q0 a+ U
  7. #define GL_FLOAT                          0x1406. S7 ?) Z6 p* H
  8. #define GL_2_BYTES                        0x1407" P" V. l" z, ?- H5 O
  9. #define GL_3_BYTES                        0x1408
    , k% y+ m. l6 N" D
  10. #define GL_4_BYTES                        0x1409' u' o9 X- `# x; c" G1 O4 x1 L
  11. #define GL_DOUBLE                         0x140A
复制代码

% C' f& K$ a% D2 B2 C
4 [: U, D) _& `) x% P- p1 m
  1. # x+ j  K0 a# F6 ^% f/ D! H/ S/ x  u
  2. int __cdecl sub_40BFD0(signed int a1, int a2, int a3, int a4, char a5)
    0 I# n- [% W8 j4 U3 @0 i( s2 d# N! }1 o
  3. {
    . o& G* Q7 a  n( x
  4.   int v5; // ecx
    2 O* B' y+ J/ ~& b
  5.   int result; // eax
    " g$ v! ?6 u" N9 n
  6.   char v7; // [esp+18h] [ebp-118h]
    ; n4 E; f8 M5 C% k
  7.   char *v8; // [esp+118h] [ebp-18h]6 c4 W4 r2 Q' H
  8.   int v9; // [esp+11Ch] [ebp-14h]
      x# }8 s* o+ a3 O
  9.   int v10; // [esp+128h] [ebp-8h]
    ; \$ r. g, F" j- x
  10. ! ~9 r* t4 l5 C8 A
  11.   v10 = v5;
    3 ]5 U: X0 j8 w) g. x0 R  F: \
  12.   if ( a4 )
    % l  a% i3 T" u7 P( @4 f
  13.   {
    ' O( a4 v$ I" V2 ~7 L
  14.     v8 = &a5;
    7 Z! P% _: e9 e
  15.     sub_41BA00(v5, a4);
    - H$ v- v" |9 l- w
  16.     v8 = 0;
    2 W6 W6 V) O/ N9 j8 \- G7 i" y
  17.     glBlendFunc(770, 771);
    2 a1 E; O# A- J0 R# l. D% S
  18.     glBindTexture(3553, dword_4DF3BC4[8 * a3]);7 M- v# ]" ^% Z8 I
  19.     glPushMatrix();" }7 y# h3 A( ^4 N5 m6 i+ l8 g
  20.     glLoadIdentity();
    * R* j" _: Y; x! w0 Q
  21.     v9 = a1;
    - o; r1 @) L+ k: o( f9 e
  22.     glTranslated(5 c  C, X7 P- ?3 O0 V. o
  23.       COERCE_UNSIGNED_INT64((double)a1),: p5 l1 x8 r! Q8 L* M1 M
  24.       COERCE_UNSIGNED_INT64((double)a1) >> 32,
    ! r" D& E8 D' v' K9 f/ q0 a
  25.       COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)),3 U5 o9 b' M' m
  26.       COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)) >> 32,' b+ w- H( Q3 {. C) ?- ?$ L
  27.       0,. G' L# H5 c  g8 H
  28.       0);
    $ G5 ?8 N9 z! ]" D' x
  29.     glPushAttrib(0x20000);5 s2 c3 [7 z" R+ S) z2 v
  30.     glListBase(dword_4DF5130 + 16);( \' D& e- K8 j6 D: {# T0 P
  31.     glCallLists(strlen(&v7), 5121, &v7);
    9 f1 i9 q' K: o  J' b
  32.     glPopAttrib();$ \2 |/ j# J! H8 C7 y! F
  33.     result = glPopMatrix();. K6 f2 \* W( c2 M' k$ h
  34.   }3 I1 l- @1 \' E0 ^9 h# `3 T  U
  35.   return result;
    # P8 ?' N+ p1 D, b  F0 }7 T) H- e  j! t
  36. }) Z; B8 C2 b/ W' z7 r  v
复制代码
4 X8 }  v+ L) Y* G

/ w5 H* w4 e- J5 ]  v8 k/ w- I' F: V# a/ x

作者: shane007    时间: 2023-9-4 18:49
顶上来,顶上来
作者: lax0601    时间: 2024-8-4 23:27
这项目得有十几年了吧,还有戏吗?
作者: lvlubozhi1    时间: 2024-9-4 15:27
会不会很恐怖很吓人啊




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