冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2023-8-27 11:17
标题: 【Opengl游戏汉化 #4】 惊恐鬼屋导演剪辑版(Scratches Directors Cut)字幕显...
本帖最后由 shane007 于 2023-9-4 18:48 编辑
( [' g+ G) m, b# z7 }& A% y" |; g; m' z1 a4 Q
这是个opengl引擎的游戏,对opengl的初始化是在scream.exe里边完成的。! ]7 W$ v, N. @
对于opengl的游戏我们主要关注glGenLists和glCallList这2个函数4 v) N! P9 w; u4 E
/ d0 ^0 o9 ~) _9 R/ k4 E, f
0 X+ {  p9 i4 a( B# ?
glGenLists的调用有4处,前3处参数为1,应该不是。
1 F8 ?/ @0 a! Z! }一下是第四处代码,这里应该就是生成字体的地方。
# p! S2 g/ ~& r从代码里可以看出,字体材质长宽各是16各字符,共256个字符,此处要修改。
& @0 A, z5 u4 f
  1. int sub_40BEB0()
    , \3 K$ o, D4 V
  2. {  u- P" P5 w5 g6 Z3 L9 b
  3.   signed int v0; // ebx
    4 k/ L4 L' x2 ?/ X$ X) L
  4.   int v1; // ecx8 a! X/ A! g2 j$ v( F
  5.   float v2; // ST18_45 \: _! G4 J; J
  6.   float v3; // ST1C_4
    ) ]4 r$ j1 j; {. u
  7.   float v4; // ST20_4
    % K6 W- Y2 _$ t( ~3 X9 e
  8.   float v5; // ST24_4+ s) @) S! ]5 a4 u5 q: ?, j/ r) ?$ T
  9.   int result; // eax
    . k1 D5 r+ B3 P# L' q

  10.   b2 ^9 s& f3 {# ~; u
  11.   v0 = 0;
    ( r! n% i( y# P* n9 p" C  B0 z
  12.   dword_4DF5130 = glGenLists(272);( W/ K/ ?2 C) d8 f/ V1 t
  13.   do; Q0 \" Z: i+ g0 P8 ?
  14.   {
    . ~. |2 t/ d3 p, z7 C* `$ T
  15.     v2 = (double)(v0 % -16) * flt_483450;9 a- |+ ?/ \! ?, |3 c
  16.     v3 = (double)(v0 / 16) * flt_483450;: f4 H! o/ K9 |$ ?! M2 c
  17.     glNewList(v1, v0 % 16, v0 + dword_4DF5130, 4864);) g1 n7 g: h' J$ p, W, e, N( q+ j
  18.     glBegin(7);! D/ l: |0 U2 P* F+ E, F; |
  19.     glTexCoord2f(LODWORD(v2), LODWORD(v3));
    4 V6 v. p' P9 }2 I! v
  20.     glVertex2i(0, 0);+ \8 J2 M4 ^- d+ I0 T
  21.     v4 = v2 + flt_483450;$ j# E! D; D7 ]# n/ R
  22.     glTexCoord2f(LODWORD(v4), LODWORD(v3));
    : P) W! V6 ~+ M  h4 v
  23.     glVertex2i(16, 0);3 a; M! }* p: _7 [" |0 y6 x: D1 R
  24.     v5 = v3 + flt_483454;. K% a! T4 B1 y# h5 a6 o( \' U
  25.     glTexCoord2f(LODWORD(v4), LODWORD(v5));! _2 v0 }7 d! e. g+ f
  26.     glVertex2i(16, 16);# `, _$ T7 [: S' B4 k0 S
  27.     glTexCoord2f(LODWORD(v2), LODWORD(v5));
    : y- S, }1 H1 Z3 g. m
  28.     glVertex2i(0, 16);* |' }, o8 P( M$ w2 S  V# J% d
  29.     glEnd();) c) m8 D5 W2 r& P8 u" I0 {4 A
  30.     ++v0;/ L0 g: T* p% S$ M: B( ]
  31.     glTranslated(0, 1076101120, 0, 0, 0, 0);( }9 r9 w6 A6 x
  32.     result = glEndList();
    # J! N; I9 ^5 N1 w' T
  33.   }
    0 Y0 L8 t3 _% q2 g
  34.   while ( v0 < 272 );0 ]& B8 X' r2 N6 f( [2 @1 {
  35.   return result;( @) x( Z* t; {! r: {6 j4 c
  36. }
复制代码
' B  @7 \2 `* Q; @; S

$ \8 E; T* p! a- T; w对glCallList的调用只有以下一处,
- E- P9 N4 K# ?这是显示单个字符还是字符串的方法,待以后再确认。7 D9 @  G0 n3 w7 l9 W
glCallLists(strlen(&v7), 5121, &v7);
% T% p: F$ \% S3 C' p. j1 h; ]5121为0x1401 ,即 GL_UNSIGNED_BYTE ,是单字节。( k! ]8 X) D# m5 y% s) h$ h" p
2 t8 L+ d3 ]) B
  1. #define GL_BYTE                           0x1400
    / e" C1 |3 _4 B/ S% W2 M5 M
  2. #define GL_UNSIGNED_BYTE                  0x1401# |& h6 U/ ~5 ]
  3. #define GL_SHORT                          0x1402
    3 v& ~% P8 D+ s4 k' b8 D6 \$ g
  4. #define GL_UNSIGNED_SHORT                 0x1403
    9 }$ f4 @% m5 j; B8 }
  5. #define GL_INT                            0x14048 N5 z1 F3 r# @! R+ I
  6. #define GL_UNSIGNED_INT                   0x1405
    / B, H9 y3 e2 J8 j
  7. #define GL_FLOAT                          0x1406+ M  _1 Z! A; Y6 I
  8. #define GL_2_BYTES                        0x1407
    - L5 {9 ?5 Z" z* G, G8 n5 m, s4 o
  9. #define GL_3_BYTES                        0x1408
    + N7 S- [) ^/ u4 R% {
  10. #define GL_4_BYTES                        0x1409; f1 Z0 R9 u4 x* q  ^
  11. #define GL_DOUBLE                         0x140A
复制代码
. Q, G, R  F3 X$ p: I6 Z2 T

8 U9 }' d8 `2 G5 K, c6 h

  1. ) \  L' }1 U% W: n0 T2 o
  2. int __cdecl sub_40BFD0(signed int a1, int a2, int a3, int a4, char a5)
    9 P$ R9 K3 n4 B6 \3 p3 o
  3. {
    " s. [* T6 F9 g  _" ?; s
  4.   int v5; // ecx  R2 m1 m+ g; e# I0 d" w
  5.   int result; // eax4 K/ {- z4 ^/ j4 A$ ^
  6.   char v7; // [esp+18h] [ebp-118h]% r: {- V* v; F6 c
  7.   char *v8; // [esp+118h] [ebp-18h]; ~: S- {* ], m- U* C
  8.   int v9; // [esp+11Ch] [ebp-14h]
    4 Q+ o& T! Y, \: A7 C
  9.   int v10; // [esp+128h] [ebp-8h]
    " y/ @/ o! z5 u7 H

  10. # W7 o; W; G' R
  11.   v10 = v5;" s' x  K2 C6 L) ?
  12.   if ( a4 )8 j, J& x$ [+ G  o6 G( k8 Y
  13.   {
    ( E3 A+ h) p: `- b8 b: [
  14.     v8 = &a5;1 j5 |9 u; |/ r: M6 U
  15.     sub_41BA00(v5, a4);
    , c+ T+ [0 T+ |/ e6 }1 I5 ]
  16.     v8 = 0;$ ?; r% N# i) \+ ^
  17.     glBlendFunc(770, 771);
    . t. y' ^0 h& d. E) o
  18.     glBindTexture(3553, dword_4DF3BC4[8 * a3]);6 b# a* e7 G2 s, H
  19.     glPushMatrix();: I, @/ Q" z# G* l' n7 b* e3 p5 H
  20.     glLoadIdentity();- m& H! y9 T% l( o
  21.     v9 = a1;
    & [7 }8 L1 S' W$ i- h' A
  22.     glTranslated(2 j6 D& l6 T% B' K8 O1 f. K. f
  23.       COERCE_UNSIGNED_INT64((double)a1),
    / K" \! U. L1 @2 ?# v" ^
  24.       COERCE_UNSIGNED_INT64((double)a1) >> 32,4 t1 u& k  j* g3 j+ u1 [
  25.       COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)),
    1 q# p! W4 M4 d( X- @
  26.       COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)) >> 32,! `0 D% z+ n8 ?8 V6 e* K" u
  27.       0,
    $ G* d2 _0 S1 S! V/ ^
  28.       0);
    ( b$ p1 T( t/ b5 t' h
  29.     glPushAttrib(0x20000);: v: P- k# k2 M1 L" t$ J
  30.     glListBase(dword_4DF5130 + 16);* e& i/ B+ q: d( M; M) |
  31.     glCallLists(strlen(&v7), 5121, &v7);* X; }8 _& u. L
  32.     glPopAttrib();
    6 a5 X3 F0 d1 y, j
  33.     result = glPopMatrix();1 w$ w, e! v4 X& X$ Z" N
  34.   }
    ' m8 ~/ ~/ q# m
  35.   return result;
    6 v, @4 d+ S6 C
  36. }
    2 ^7 ~: o& o* ~- _
复制代码

. {& x, l( N0 }. |/ f7 h1 y. `0 E1 L0 W7 q# c2 E: N; ^# J5 [3 N
5 U8 ]: D, H7 B, ~/ v

作者: 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