冒险解谜游戏中文网 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 y
glGenLists的调用有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
int sub_40BEB0()
' v5 i) E; v# z5 _+ n9 x2 ?* ?- M4 Y
{
! r3 o, P3 E6 s: v1 w' m4 S6 M1 D
signed int v0; // ebx
6 C, ~, p/ p3 c. P
int v1; // ecx
& s! z3 u4 E4 W: u% d0 A
float v2; // ST18_4
2 B8 {0 h" T2 T
float v3; // ST1C_4
5 M2 Z, F( X) r
float v4; // ST20_4
# `* R( r$ c. L4 B* ?' e
float v5; // ST24_4
8 T8 m5 K3 ?3 Y: S
int result; // eax
: v) z% U) c8 p9 R7 {( c
8 k& ]' q" s8 b y( d
v0 = 0;
' s: [ y7 X% o' S
dword_4DF5130 = glGenLists(272);
% p9 m/ P* m& H$ l
do
. H- \) U# s9 W2 C. c* }
{
6 n4 A& R' r0 N$ ]7 d
v2 = (double)(v0 % -16) * flt_483450;
) M. d# x: g! t+ Q8 y. s. p6 H
v3 = (double)(v0 / 16) * flt_483450;
* M* x0 Z/ H: u
glNewList(v1, v0 % 16, v0 + dword_4DF5130, 4864);
) B6 z0 H& _) e2 z& S9 B) C- J
glBegin(7);
q, o# ~2 M/ f m& Q- z
glTexCoord2f(LODWORD(v2), LODWORD(v3));
" V# k q; J/ e) @- S8 m- P) }
glVertex2i(0, 0);
$ {" X! e! V: C9 } A' b- E( q
v4 = v2 + flt_483450;
3 t. a( {2 [8 a6 H) w3 G) E
glTexCoord2f(LODWORD(v4), LODWORD(v3));
0 x% m+ H* a: e% z( ?+ j* a, l- @$ p
glVertex2i(16, 0);
/ b+ d1 x; t; q: w; j4 S
v5 = v3 + flt_483454;
. N9 S5 C z( h5 J: y2 C" C
glTexCoord2f(LODWORD(v4), LODWORD(v5));
7 O" O# N. k3 S S+ F J
glVertex2i(16, 16);
6 ~ p' W2 X' O. ?6 F6 _* F. d
glTexCoord2f(LODWORD(v2), LODWORD(v5));
% Z- i. Q" z) | D+ a
glVertex2i(0, 16);
) X& F- w; y+ h
glEnd();
, ?) j& J$ p* e2 r; d; Y
++v0;
, D+ z. J0 @: @% H: x
glTranslated(0, 1076101120, 0, 0, 0, 0);
1 |' }# l. O8 G5 C* S
result = glEndList();
! l) }( O9 [6 y/ f N
}
! o, n+ a) D' [+ c4 b* f2 Y: B
while ( v0 < 272 );
& B! |; y& b) }
return result;
* z3 y/ I1 p/ W5 ^& O* G
}
复制代码
; {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
#define GL_BYTE 0x1400
: s u1 ~2 p5 I7 i
#define GL_UNSIGNED_BYTE 0x1401
+ @$ }9 ~8 b" J/ g0 `
#define GL_SHORT 0x1402
1 Z: d7 ~, G# S8 X# S8 N, h
#define GL_UNSIGNED_SHORT 0x1403
9 Z- @% D' b6 O8 T; ^. r+ ~' I5 A; @
#define GL_INT 0x1404
2 {3 w5 m( r# h* T
#define GL_UNSIGNED_INT 0x1405
3 E% u- E6 Q0 a+ U
#define GL_FLOAT 0x1406
. S7 ?) Z6 p* H
#define GL_2_BYTES 0x1407
" P" V. l" z, ?- H5 O
#define GL_3_BYTES 0x1408
, k% y+ m. l6 N" D
#define GL_4_BYTES 0x1409
' u' o9 X- `# x; c" G1 O4 x1 L
#define GL_DOUBLE 0x140A
复制代码
% C' f& K$ a% D2 B2 C
4 [: U, D) _& `) x% P- p1 m
# x+ j K0 a# F6 ^% f/ D! H/ S/ x u
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
{
. o& G* Q7 a n( x
int v5; // ecx
2 O* B' y+ J/ ~& b
int result; // eax
" g$ v! ?6 u" N9 n
char v7; // [esp+18h] [ebp-118h]
; n4 E; f8 M5 C% k
char *v8; // [esp+118h] [ebp-18h]
6 c4 W4 r2 Q' H
int v9; // [esp+11Ch] [ebp-14h]
x# }8 s* o+ a3 O
int v10; // [esp+128h] [ebp-8h]
; \$ r. g, F" j- x
! ~9 r* t4 l5 C8 A
v10 = v5;
3 ]5 U: X0 j8 w) g. x0 R F: \
if ( a4 )
% l a% i3 T" u7 P( @4 f
{
' O( a4 v$ I" V2 ~7 L
v8 = &a5;
7 Z! P% _: e9 e
sub_41BA00(v5, a4);
- H$ v- v" |9 l- w
v8 = 0;
2 W6 W6 V) O/ N9 j8 \- G7 i" y
glBlendFunc(770, 771);
2 a1 E; O# A- J0 R# l. D% S
glBindTexture(3553, dword_4DF3BC4[8 * a3]);
7 M- v# ]" ^% Z8 I
glPushMatrix();
" }7 y# h3 A( ^4 N5 m6 i+ l8 g
glLoadIdentity();
* R* j" _: Y; x! w0 Q
v9 = a1;
- o; r1 @) L+ k: o( f9 e
glTranslated(
5 c C, X7 P- ?3 O0 V. o
COERCE_UNSIGNED_INT64((double)a1),
: p5 l1 x8 r! Q8 L* M1 M
COERCE_UNSIGNED_INT64((double)a1) >> 32,
! r" D& E8 D' v' K9 f/ q0 a
COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)),
3 U5 o9 b' M' m
COERCE_UNSIGNED_INT64((double)(dword_4DF8B68 - a2)) >> 32,
' b+ w- H( Q3 {. C) ?- ?$ L
0,
. G' L# H5 c g8 H
0);
$ G5 ?8 N9 z! ]" D' x
glPushAttrib(0x20000);
5 s2 c3 [7 z" R+ S) z2 v
glListBase(dword_4DF5130 + 16);
( \' D& e- K8 j6 D: {# T0 P
glCallLists(strlen(&v7), 5121, &v7);
9 f1 i9 q' K: o J' b
glPopAttrib();
$ \2 |/ j# J! H8 C7 y! F
result = glPopMatrix();
. K6 f2 \* W( c2 M' k$ h
}
3 I1 l- @1 \' E0 ^9 h# `3 T U
return result;
# P8 ?' N+ p1 D, b F0 }7 T) H- e j! t
}
) Z; B8 C2 b/ W' z7 r v
复制代码
4 X8 } v+ L) Y* G
/ w5 H* w4 e- J5 ] v
8 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