冒险解谜游戏中文网 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 [
int sub_40BEB0()
) ^- j& Z% l+ ?- p) @
{
7 D1 V9 a3 N @& a& K
signed int v0; // ebx
4 q& i6 g% h; o+ z$ b( O
int v1; // ecx
+ r1 i: l3 w, d) H& W O& ?$ ^; k
float v2; // ST18_4
. `2 [" W! [: q( O# [% N
float v3; // ST1C_4
% ^- T2 l* ?$ t9 u
float v4; // ST20_4
8 }9 d* b8 a4 S
float v5; // ST24_4
2 N/ Q2 g8 @5 j2 _
int result; // eax
4 K: Q" K: w) s
0 u* W+ L7 l" m8 E7 c+ V
v0 = 0;
( M# P5 Y0 T; Y- X6 v" g
dword_4DF5130 = glGenLists(272);
M x# ?* w0 U/ u5 O: e1 F
do
3 M. j7 J% x, u8 N. @4 o
{
% y6 P" ~4 n( `. d% Q
v2 = (double)(v0 % -16) * flt_483450;
: @, I7 R, d- E( d$ v$ M7 b
v3 = (double)(v0 / 16) * flt_483450;
* u" y. o1 p" l
glNewList(v1, v0 % 16, v0 + dword_4DF5130, 4864);
5 F3 _. i7 F! J# u
glBegin(7);
4 ^ p8 w2 y" A* `
glTexCoord2f(LODWORD(v2), LODWORD(v3));
0 Z6 L, i# i6 H& ^
glVertex2i(0, 0);
# x8 G: f, H# N: R7 ~% B7 C; C8 T
v4 = v2 + flt_483450;
; S9 z2 R$ q# l. r7 _
glTexCoord2f(LODWORD(v4), LODWORD(v3));
) j v( P: z2 n* z. H- C
glVertex2i(16, 0);
3 c2 p. |$ d2 B' F
v5 = v3 + flt_483454;
6 _# }9 D/ a, ]" q) ?8 D }2 F
glTexCoord2f(LODWORD(v4), LODWORD(v5));
# r$ I8 _, P+ p: W8 F. a; e+ e
glVertex2i(16, 16);
' o; M; R) Z* E
glTexCoord2f(LODWORD(v2), LODWORD(v5));
8 F2 x5 z0 b& B% ]: p: C* m7 A* b
glVertex2i(0, 16);
+ T8 T( |# ?1 f& z/ m) C% z
glEnd();
9 b" L% j6 Y R9 ?1 x5 C0 t0 Y
++v0;
" m: @3 z" {. o# J' A/ V' s
glTranslated(0, 1076101120, 0, 0, 0, 0);
5 q! _/ ]1 w n, O
result = glEndList();
$ G) B$ {% m6 m6 L3 u0 |$ ?6 x
}
- a: g! g: _1 Q. P/ n+ u" d0 o: v1 [
while ( v0 < 272 );
3 g% z% C/ j% C' {" `) t+ Y! J! v
return result;
% O) k% U# r7 S; P
}
复制代码
/ 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 o
5121为0x1401 ,即 GL_UNSIGNED_BYTE ,是单字节。
# m3 s P1 n. x0 t* F
$ a# t4 ?1 r& |- y# q
#define GL_BYTE 0x1400
! t1 D- U! J- E4 I. a. k
#define GL_UNSIGNED_BYTE 0x1401
) k8 J6 [! L6 Q
#define GL_SHORT 0x1402
/ q9 a4 o: s6 _7 K+ j
#define GL_UNSIGNED_SHORT 0x1403
i+ O3 f9 X8 `- V& K$ I
#define GL_INT 0x1404
* `. a7 t3 [ Y3 y7 X1 A
#define GL_UNSIGNED_INT 0x1405
7 P! T' l3 w0 o" ?1 J4 S
#define GL_FLOAT 0x1406
4 i2 [9 M/ \- V* N" D
#define GL_2_BYTES 0x1407
1 h+ H& Y, n n" Y1 j# M
#define GL_3_BYTES 0x1408
# w* _/ g0 Y8 E* A4 |
#define GL_4_BYTES 0x1409
0 n& N$ y, ?$ {5 c* P
#define GL_DOUBLE 0x140A
复制代码
, j6 _5 x3 Q q7 C! d" @
* e$ P# T6 Q2 V. Q' B7 S
/ n) s4 O: `& ?: i
int __cdecl sub_40BFD0(signed int a1, int a2, int a3, int a4, char a5)
$ ]+ E$ u1 v7 e% X( Z
{
8 ?# [6 ~" e$ G! ^* l
int v5; // ecx
. F) O- w8 s0 F' y s# s
int result; // eax
' i$ y. A9 {) W3 Y9 n
char v7; // [esp+18h] [ebp-118h]
8 R! J, b$ ^2 R2 c* p( E, D
char *v8; // [esp+118h] [ebp-18h]
- `* u9 J" f c5 L1 v6 ^& e
int v9; // [esp+11Ch] [ebp-14h]
6 C; T% F$ ]" X9 ?
int v10; // [esp+128h] [ebp-8h]
) Y1 _: L1 l7 w$ K1 E1 ~& J B
g6 m+ L5 j" f1 I/ _
v10 = v5;
) o/ v/ q- a& K$ ~/ x
if ( a4 )
. ^' {& G0 b8 ?
{
5 K' F: W- r# Y9 T* w- f4 M
v8 = &a5;
$ s4 S0 i! S; _
sub_41BA00(v5, a4);
( P) N6 L( x G+ ~$ t+ D; T. Q
v8 = 0;
1 ?4 G* a# ?. g. {# V$ o: Y& r
glBlendFunc(770, 771);
& j# \ P' y( j
glBindTexture(3553, dword_4DF3BC4[8 * a3]);
% t3 ]8 w* h' T. [
glPushMatrix();
; m+ V! D* N1 j( h6 c
glLoadIdentity();
; B( G* }% f' H. _$ M# }3 r
v9 = a1;
3 u6 H5 W. U/ l$ L' t# u
glTranslated(
5 h& z! q! {5 E Z' M1 o5 N
COERCE_UNSIGNED_INT64((double)a1),
# _) ?: T) |1 b$ k( t
COERCE_UNSIGNED_INT64((double)a1) >> 32,
: r- Q& O$ R4 ?* W3 e2 T
COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)),
# U6 R* X4 G# M( e7 k
COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)) >> 32,
. ~# d) I$ p9 r# T0 Y
0,
}) g! O5 D4 n
0);
4 b1 N$ W5 I, M5 i% z: {1 ~
glPushAttrib(0x20000);
2 f( Y/ I4 q4 O: w* `$ |
glListBase(dword_4DF5130 + 16);
1 h1 R5 k! H1 x! ?% D
glCallLists(strlen(&v7), 5121, &v7);
1 k+ B$ q9 a; y
glPopAttrib();
' K0 Q8 m" ?" ^1 q) a; l* C
result = glPopMatrix();
$ Y; _; n: F8 I
}
Y9 E0 w% G, g4 W& z
return result;
/ X# d' a* W6 m5 J
}
$ 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