冒险解谜游戏中文网 ChinaAVG

标题: 【Opengl游戏汉化 #1】 纪念品(Keepsake)图形引擎分析 [打印本页]

作者: shane007    时间: 2023-8-25 17:27
标题: 【Opengl游戏汉化 #1】 纪念品(Keepsake)图形引擎分析
本帖最后由 shane007 于 2023-8-25 17:31 编辑
, s2 f6 Y! z) i  R$ F
. ]7 B# h2 G3 B% q4 {* X2 y  q本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,, l( T& W% V; F' L: k& i6 A
游戏应该实际只用了其中1个,暂时作下记录。. G$ S9 O' S3 ~8 O' _6 X
7 {  x5 v: u, Z( q. a9 i7 g$ J6 l1 Q
DirectDraw是由bin目录下的ddraw2d.dll来完成的。# v0 s* D# k" N8 K3 C
以下是一处的初始化代码
$ ]& m( g1 G2 Y4 K, y, P
  1. CSpace:10015015  T# P3 v5 l/ i: N
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    / x. p( l. C  I( i1 t6 l' y
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0* y  r& E  F+ T" x
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    / p3 D7 s7 @8 p2 w: _  ]9 n
  5. CSpace:1001501F                 mov     ecx, [eax+230h]0 J; g, F! R2 n4 e
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]$ w" d, m) b  k/ r; G& V6 r
  7. CSpace:10015029                 test    edx, edx
    6 P! |4 k" k, d( C+ E
  8. CSpace:1001502B                 jnz     short loc_1001503C
    5 p- K- r) Y0 V# v7 V7 ]- u
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]* a% ^( [0 z" o) y% I0 o
  10. CSpace:10015030                 mov     ecx, [eax+230h]6 ?  }$ U0 K. A+ w8 \, ^. x
  11. CSpace:10015036                 add     ecx, 88 _6 K/ ?% V6 S9 C- r, D; m* K
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx  m! b5 ^6 L5 i5 a! l
  13. CSpace:1001503C
    . z, l* ~& @! Z3 T3 U( D* N6 v2 V
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j7 F- }6 f1 J! W8 Q: U! `( f/ l+ J
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    ( z. ~7 L# I# M0 t% I
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    / D8 Q$ V+ b+ n1 x( ~5 O
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]% }) D  |; b# K! J8 {* w, r9 v
  18. CSpace:10015048                 push    edx. q& r& G  ^5 o0 K* v: v
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    4 ?( h" V+ y8 Z7 H5 K! O  b
  20. CSpace:1001504C                 mov     ecx, [eax+230h]7 X- ?5 J0 _, P& u3 Y( f! t
  21. CSpace:10015052                 mov     edx, [ecx+20h]9 Y1 n* k  |: i
  22. CSpace:10015055                 push    edx
    " `" g6 C. E* b3 \
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    & [  j$ J$ Z8 U  F
  24. CSpace:1001505B                 push    3( S; {( R/ q2 n3 n4 f& h. r: J4 {
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    5 J, U' y1 J* B3 L' J
  26. CSpace:10015060                 push    eax# ~3 N/ l) [+ f* q/ H& ^
  27. CSpace:10015061                 call    sub_1003882A
    & C& W+ v* o& A% R
  28. CSpace:10015066                 add     esp, 14h
    / B" h9 i9 u0 x- f; i6 B! }
  29. CSpace:10015069                 push    0               ; pUnkOuter+ Q' `$ J: h, A7 L$ @5 h. W2 R. ~
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    4 Y* z2 M/ E1 P: q# t( H
  31. CSpace:1001506E                 add     eax, 1DCh  q5 {7 ~) e5 F0 y
  32. CSpace:10015073                 push    eax             ; lplpDD
    5 s1 \, S* k9 P3 h* @7 a& p# l  A5 H
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]( t5 T  H3 h/ ~+ r* q- ]: M7 o
  34. CSpace:10015077                 push    ecx             ; lpGUID
    " o' g, J" x3 y. J0 h" q$ \* ]+ V8 S
  35. CSpace:10015078                 call    j_DirectDrawCreate9 W6 h" p+ G6 x* i, ^( }5 W
  36. CSpace:1001507D                 mov     [ebp+var_14], eax; e" M2 V8 u* ], @* [
  37. CSpace:10015080                 cmp     [ebp+var_14], 09 F& p4 @( r& e5 ~6 Q
  38. CSpace:10015084                 jz      short loc_1001509E
    " y( a: n9 X( ?
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    8 w" ]4 L* ?  j5 j# a6 H& X
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]' `7 t; ]3 |% b! g6 i
  41. CSpace:1001508E                 push    eax
    7 Q) \( J) w7 [. A5 j
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]$ s0 j  n4 u) V. H7 W! F! r  v4 x5 L
  43. CSpace:10015092                 call    sub_10038F3C+ T( `6 L0 ^" }+ ]3 q: E/ [
  44. CSpace:10015097                 xor     al, al3 ^, T! b7 [' p  Q- c' y1 D. A1 e! [
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

8 ]: J) f" {  x2 f) C
7 w6 G, C/ L6 i: h! ~3 Z8 Y7 V3 `/ K- D; b) {# a. P3 v/ I
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
: e- p$ o+ ^. b, y! [6 v2 D记录到log_GL.out文件中。以下是摘录的一段。
0 q8 I9 q, y4 ]4 R我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。- p/ v( W0 s6 i' I* F" u% A8 O; B
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
* `; V* T- ?: o9 y7 ~: D' v- F6 A
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ( n$ X& q/ h9 P8 g
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    $ Q8 l- ~2 {! Y. g: Y
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    ! ^6 |& ~- N' B% j; F0 w6 }
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    / K* ~: }" _+ G2 ?0 b
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
      l( Y4 U. v& O6 G6 O
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    9 I, ^- m7 }) c: f- _7 J% J
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>0 @- I" y, n  u
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>! p6 U* h  X$ Y% d
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    9 I1 ^; Q0 L9 N+ ^7 t/ j
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>. F, a. O# O" V2 W, d& W
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>: }: N0 U5 S; N  X$ z) y
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>4 j6 m3 z0 ^, s8 K+ R# T
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>  @7 Z8 }: P$ l& @% ?* T3 O0 e
  14. glClear, GLbitfield<256>
    ' U8 l' l0 Q  y4 m% o' {
  15. glShadeModel, GLenum<7424>4 D/ I9 |: C5 R; s, B! M
  16. glDisable, GLenum<2929>
    # c8 y1 V, B1 Q+ L3 t0 y! h, X
  17. glDisable, GLenum<3008>/ x+ @% Y( G) I& E5 n! p$ x
  18. glDisable, GLenum<2896>
    . c- W1 ^; o, e5 \) |, j1 ]  L
  19. glEnable, GLenum<3042>
    1 |& Z7 w" I: \' z
  20. glDisable, GLenum<3553>
    ' I8 H6 Z2 s; s# M- T
  21. glBindTexture, GLenum<3553>, GLuint<631>( ^/ W" _$ \, r$ v+ g5 F
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>: E. ~* A& I0 R5 `2 _: J- ?
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ! y# U; f7 v, q) d* F: d
  24. glClear, GLbitfield<16384>
    . \* F7 B2 Y% a7 k8 D* J2 X
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    1 W8 c0 n; s. K2 o8 J6 L
  26. glEnable, GLenum<3553>, q4 E2 S" \  t- }. k4 z
  27. glBegin, GLenum<7>
    2 H* w8 z( Y& N4 l" l
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    + S. {8 |. _; e# n3 O7 [0 X
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    & c% q8 L1 A6 ]( H# I) g. t
  30. glVertex2i, GLint<0>, GLint<768>
    ! w1 h$ U1 l: ~$ j
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    7 M! u( j' X- Y0 x- l
  32. glVertex2i, GLint<1024>, GLint<768>. T+ Y2 E+ I5 ]2 |1 y3 s$ \
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216># @1 l% r% E6 s# g) @3 A
  34. glVertex2i, GLint<1024>, GLint<-256>
    ; O6 T$ N3 _3 R' W5 Q2 a
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>4 K$ R  p) J# {
  36. glVertex2i, GLint<0>, GLint<-256>  N$ A; Y, t+ M) h2 i5 J
  37. glEnd$ C6 Q7 e3 @( o
  38. glShadeModel, GLenum<7424>
    ( a; B' x4 ?  S) R
  39. glGetError
    % c( `$ W6 p$ e% `. K# a
  40. glDisable, GLenum<2929>
    & P! C; j' E1 m: n6 ~: Q
  41. glGetError( M7 c; K7 P5 h/ K1 Z+ H9 p
  42. glBlendFunc, GLenum<770>, GLenum<771>, B2 D0 n, c6 e
  43. glGetError
    $ v% a4 d  l' w4 d% ~# C
  44. glEnable, GLenum<3042>
    7 a7 u, e+ B, c( C- X& H
  45. glGetError
    5 T! P' h. o- w2 X4 x
  46. glDisable, GLenum<3553>
      H$ D! [, V+ C2 ?
  47. glGetError
    , @7 D1 Q+ h* v$ W9 x
  48. glBegin, GLenum<7>
    % q; G" i: A/ O8 b
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>: J* ^+ \- R7 I
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>2 Y, b6 q) Q# x" H* U; C' `
  51. glVertex2i, GLint<0>, GLint<768>! a/ }! e4 m; N4 G+ L- z
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>9 f! T2 u8 C( w5 V8 v. c4 c/ ?
  53. glVertex2i, GLint<1024>, GLint<768>7 j5 c% r% R" \0 ]( b4 p
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>  S+ P1 E2 |* B* b/ }) C7 O
  55. glVertex2i, GLint<1024>, GLint<0>
    " n3 o6 ~+ `/ c
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    9 R* q- @. T4 s
  57. glVertex2i, GLint<0>, GLint<0>
    # P3 m+ ~" D: J$ u3 d  Y4 d/ g
  58. glEnd0 x, J* t7 t/ A" B5 p7 M
  59. glGetError
      h% V+ O( ^: _
  60. glEnable, GLenum<3553>
    & a* {* t6 {  `3 S, d; P, i) e
  61. glGetError
    . A: t- s3 r/ p+ T
  62. glFlush; p, b+ |$ j5 r" g
  63. wglSwapBuffers
    6 U6 l* l0 x, G) D/ E& [
  64. ---------------------------
    4 u, S$ U' Z, A) n5 O: d: A
  65. , HDC<-33484711>
    $ S) n! S1 m, l4 P) m! y) P
  66. wglGetPixelFormat, HDC<-33484711>
    $ G" z" p$ m7 g1 I: X+ H- I4 U& g+ z0 `
  67. glMatrixMode, GLenum<5889>
    $ l8 f4 J& Z' A( a
  68. glLoadIdentity: Y/ d9 z4 c8 U' L1 p! \
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
      a- a/ e" o, d1 E! q, D
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    ' ^/ p7 P4 q- F% f) W8 {" d* u
  71. glMatrixMode, GLenum<5888>9 t3 W, g9 Y" R2 l
  72. glLoadIdentity
    ' T* P- B% l' [5 O5 ?
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>6 y, r: N4 `: f% `. E! R
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>- R8 L) A" s. I% F1 b7 V) {+ L
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>* s. G1 \' V) X! }& S( h2 Z4 z
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    $ Q* k' E! j- D2 [
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    / V! y# v6 T* a7 v
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    / D3 f4 }# w6 ?' _; r2 Q: Z0 |
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>& x& Y# S5 y3 \5 S
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    0 z. f) V9 D2 q* ?# V+ y; P
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ! a" U% ^" h/ \; Z) X# w$ ]$ h
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>7 c2 B# U( p! C7 k8 I
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>* T0 m: I6 ?. q& n1 W! X6 i" P
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770># z( y  B" e* y, ^& A
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    ! E1 K- ^7 h' P# r4 Y
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    6 `" y" F- j% P1 t, e! M1 f; M
  87. glClear, GLbitfield<256>
    : @4 w; f1 i7 _% q
  88. glShadeModel, GLenum<7424>
    0 E: U, }0 U2 J4 U& Z& @9 _# E$ ]
  89. glDisable, GLenum<2929>9 f* A- j; {; g- h, l( [
  90. glDisable, GLenum<3008>7 w/ r5 G5 G+ L" k& |& Z
  91. glDisable, GLenum<2896>
    6 c! Z/ x4 U9 m) Q
  92. glEnable, GLenum<3042>8 R- h6 @* z$ N! e
  93. glDisable, GLenum<3553>* R6 L5 W' |7 k. \4 e# C
  94. glBindTexture, GLenum<3553>, GLuint<631>
    5 ~, |, O1 @( j0 t6 g( ?
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>/ P- S4 A0 b: e# R' s) p7 `
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>3 N7 E2 q, M3 A& i
  97. glClear, GLbitfield<16384>7 R: t3 r- F0 P" a; }/ Z- Q
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>+ j9 O8 L6 h5 i# p" [6 m2 d
  99. glEnable, GLenum<3553>
    ; F- R( a( W: g% g* v# {! p
  100. glBegin, GLenum<7>
    ( [" {$ J  j$ T
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>3 A7 X/ n% G+ j
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>+ L( @! d* v, p
  103. glVertex2i, GLint<0>, GLint<768>
    % d" W- w. p2 t- K0 o
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    : h3 v+ Q; h5 l; V1 M5 x  P; |4 e
  105. glVertex2i, GLint<1024>, GLint<768>) J4 d8 H8 R% S
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>+ o4 O  X8 @7 h3 l; ^1 r
  107. glVertex2i, GLint<1024>, GLint<-256>
    ' _/ Q' f  l1 J/ S* _. e3 {$ b: q
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    . u! m4 v4 ~% v# E
  109. glVertex2i, GLint<0>, GLint<-256>
    # I$ M7 e( U- p% e  y+ \
复制代码
/ s% j7 H, e* F

7 C( r4 V3 h  y9 D




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