冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2023-8-25 17:27
标题: 【Opengl游戏汉化 #1】 纪念品(Keepsake)图形引擎分析
本帖最后由 shane007 于 2023-8-25 17:31 编辑
+ m4 @* l) Q& ]4 n8 p0 V
. d" z0 L, h2 ]) `" o9 c) L* I本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
4 p: m$ O8 A/ L2 ^& u5 ^游戏应该实际只用了其中1个,暂时作下记录。
5 i0 a# h  u, q9 V* o  l  h! b4 t% D
DirectDraw是由bin目录下的ddraw2d.dll来完成的。
; h1 I; y0 f$ x% {+ X$ ]5 H. t以下是一处的初始化代码* W+ Q1 b. D' C; K0 ^3 Q
  1. CSpace:10015015
    + f' O  ]7 [6 Q" w
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    7 z+ e1 \9 F8 |# D1 Z' o
  3. CSpace:10015015                 mov     [ebp+lpGUID], 08 i' R2 N/ Z. o2 o9 w8 J* z
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]( C4 J+ V+ n# Q8 x) c, f: N, b
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    % Z8 \* S- x* Q3 n2 i" K
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    - R+ P- J- ~) T7 H
  7. CSpace:10015029                 test    edx, edx0 s4 u* ~& F% `& H# z  v  i7 e
  8. CSpace:1001502B                 jnz     short loc_1001503C
    / _& i) t7 D5 V% y* Z4 }
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]) W/ o: R- _7 R* j6 h7 m
  10. CSpace:10015030                 mov     ecx, [eax+230h]$ f! P" T: s! m+ D0 }! Z8 ^6 P
  11. CSpace:10015036                 add     ecx, 8
    * A: D- l; w5 S7 x. w- O+ u
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx' y+ T  X" [# B0 Q0 C
  13. CSpace:1001503C
    $ V) X* @, b1 c  V0 ?& R5 g
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j7 Q$ y5 D! `. ?( _9 N- D( y0 X
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    ( A5 f7 Z. R! u4 j7 \
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    0 ]* h1 t2 M& k8 C/ a% X
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    7 l4 r% x) r, T2 a. @
  18. CSpace:10015048                 push    edx% i. M9 D. t" ]& C: ?2 E
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]2 V$ b+ `" r, _; g+ a- V) v/ ?3 L
  20. CSpace:1001504C                 mov     ecx, [eax+230h]0 }. b3 g1 Q3 {" T
  21. CSpace:10015052                 mov     edx, [ecx+20h]# [# H, Q. Q2 d: m$ d2 a$ o& c
  22. CSpace:10015055                 push    edx0 b! S; {( M2 y5 P
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    $ ?/ a( U1 J2 R
  24. CSpace:1001505B                 push    3
    # {5 p" _! w8 Y3 l5 O
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]& }4 v$ o7 i/ v0 U) _1 P- S- Q
  26. CSpace:10015060                 push    eax
    % F' s# }. k+ G  @8 `% S+ |/ {
  27. CSpace:10015061                 call    sub_1003882A( Q9 `9 W2 l3 h) t# B2 a- i3 p: o
  28. CSpace:10015066                 add     esp, 14h4 C3 a8 U) ?' O$ j. U
  29. CSpace:10015069                 push    0               ; pUnkOuter/ W1 I5 H( Y3 Q6 k9 F8 O' J
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    8 h$ W* C3 ]: I. ^* K9 g1 L, M
  31. CSpace:1001506E                 add     eax, 1DCh
    / ^( o% `2 a7 |. }3 N( X; i! E
  32. CSpace:10015073                 push    eax             ; lplpDD  C  Q3 ]2 h% K2 Q- ?  Q6 {( F
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]6 _' x1 J& w- K( W1 M
  34. CSpace:10015077                 push    ecx             ; lpGUID
    - t! L( e9 l# x* a3 `9 e- G7 D
  35. CSpace:10015078                 call    j_DirectDrawCreate
    ! \+ o4 _( P. i$ l$ b" }4 |
  36. CSpace:1001507D                 mov     [ebp+var_14], eax, Y+ g0 c2 }0 q  v. u/ j
  37. CSpace:10015080                 cmp     [ebp+var_14], 05 B( M2 r8 e0 _2 w- v  ^2 u
  38. CSpace:10015084                 jz      short loc_1001509E
    : d/ |% T- O& j; e1 g' U  G* ~
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    & k" w& e! r; A4 X! [
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]. l6 [' v' \; X& s  C; z
  41. CSpace:1001508E                 push    eax
    , l( C5 g+ @2 Z$ p7 V" f9 y1 f
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]( R: I5 i$ ?: i8 K9 m% o& p
  43. CSpace:10015092                 call    sub_10038F3C; d' x$ T  V7 b$ Z7 ?
  44. CSpace:10015097                 xor     al, al
    - Z. I* H& e3 o! I
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
3 d; c  Q) c$ X

  Y1 Y8 n  s+ q
4 G" X# A8 n! G& t# e9 S我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
3 M0 |% ^" V6 S, D. o9 ~: `; Z9 s记录到log_GL.out文件中。以下是摘录的一段。
' s: @) A1 q5 y, x# [5 u我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。4 ^' v) S; F, ^! y7 _' W: d9 N' b
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?# i! i' v: m% n$ B' L
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    * M: B# t0 n5 O/ m
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    * W9 t  ?, v+ W0 F  v
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    3 f  ?" m1 {6 j# X+ l5 l
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    ) T" n' W) R, P; @7 \* P
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>/ T8 e* d% L& V1 [9 W, \1 O
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>7 V) x! B  l# J8 l% w
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>9 ~6 X: _2 r. c( |
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ! s: P6 a0 c+ Z* L" m- p
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>  r) p: X2 b. I# ?9 b; M0 _
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>$ g- r" r8 k1 H2 O0 r6 b) ?
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>- I* E, O$ W4 ~4 h) Q
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    ) j9 L5 A9 d0 w7 i7 I" C7 D7 r
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>8 l/ i; [5 _! C( |7 R8 i0 x2 n: B4 w
  14. glClear, GLbitfield<256>- n: ^5 A$ c- t) x
  15. glShadeModel, GLenum<7424>
    9 M* ~( f( B2 b6 u9 U, Q7 Q
  16. glDisable, GLenum<2929>
    - D- r- A+ ?, o1 `( R4 e
  17. glDisable, GLenum<3008>
    2 L3 r+ W4 c) v. P
  18. glDisable, GLenum<2896>
    ; G0 Z* `" E: O3 F5 x3 U4 \
  19. glEnable, GLenum<3042>
    ' `0 O0 k/ g5 p+ I
  20. glDisable, GLenum<3553>" V& T* w3 @$ r' v; o: `
  21. glBindTexture, GLenum<3553>, GLuint<631>
    ' _  S  b* z0 e4 w& O
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    - p& D3 j6 ?2 F3 r7 |# v
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ! R! e% `. u: I4 N7 k2 D0 Z
  24. glClear, GLbitfield<16384>
    5 E# L; _, }( @& l# N
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    7 N4 X' [* R5 m6 Q* H) c
  26. glEnable, GLenum<3553>
    . u1 ]4 L' {* h! l7 E0 P) t
  27. glBegin, GLenum<7>% a: F6 I! }- w& }
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>! _+ y: y1 }# v9 o+ K
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>8 |/ H5 A0 P: B7 r
  30. glVertex2i, GLint<0>, GLint<768>" P! o& G- R& a
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>7 Y8 g6 Q% Z$ U, x8 U( L
  32. glVertex2i, GLint<1024>, GLint<768>4 ]: Y3 J6 }- t, g) ~
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>6 m% R7 f" B7 ~- E! V
  34. glVertex2i, GLint<1024>, GLint<-256>
    " E) g, W! {7 }; O5 N
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>8 S2 t2 @, B; \7 r
  36. glVertex2i, GLint<0>, GLint<-256>
    1 G4 ~2 x3 `. z1 j) }+ k' u
  37. glEnd
    ' \1 W* p+ Y6 J% v" E! Q- E
  38. glShadeModel, GLenum<7424>! b6 v! o3 O- S. d' M! [
  39. glGetError7 K$ u  }9 m% M4 c3 a4 B* @* D
  40. glDisable, GLenum<2929>
      L  R5 `; \: H8 [/ X
  41. glGetError
    * T3 j. C" Z- i( p- a
  42. glBlendFunc, GLenum<770>, GLenum<771>& i! }3 z! e! }4 [9 ~
  43. glGetError
    , \8 O; S8 k+ j% s- ^* [6 Q8 F
  44. glEnable, GLenum<3042>
    3 s9 s, v! X# O2 C% Y2 `5 v3 Z" V
  45. glGetError
    9 R% |5 N4 ]5 D8 E9 m5 P
  46. glDisable, GLenum<3553>5 J4 @4 m& \2 y5 x2 [
  47. glGetError8 W' C( A# p: x( C8 e
  48. glBegin, GLenum<7>
    8 _4 a- v7 `- p/ h
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    ) P! B/ s% h& `# V
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>3 {6 n- d* N$ \7 D9 _3 k
  51. glVertex2i, GLint<0>, GLint<768>
    ! [- R6 I2 v! U& y- B- S
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    . z# G" l* O8 z
  53. glVertex2i, GLint<1024>, GLint<768>& O- b7 I+ x3 q% a3 ]
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ) C5 k+ a6 [; U, q4 A
  55. glVertex2i, GLint<1024>, GLint<0>. N1 O+ Y1 `/ ~0 l6 B( d% Z- {
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    : K. X/ ?3 C( m6 G$ t& A
  57. glVertex2i, GLint<0>, GLint<0>, @4 `( m& m5 i: B
  58. glEnd
    ' {2 B- T2 r5 |% Q+ r, r5 k
  59. glGetError
    / i5 A# }! ^" m! \: t
  60. glEnable, GLenum<3553>
    + T4 s7 \/ Y, Z% N  ^) O/ A" d
  61. glGetError! y  y. U3 {5 W: g5 c8 F- @, W( w/ I
  62. glFlush% t" ?* O, Y7 i
  63. wglSwapBuffers. v' F6 R7 y% Z: U0 R1 j5 @
  64. ---------------------------
    ) s1 X% v+ U8 f0 x& n9 ?/ U" P5 R
  65. , HDC<-33484711>3 ~3 ^6 l! C1 Z" g" V! N; g
  66. wglGetPixelFormat, HDC<-33484711>
    ' o. }! q, |! j
  67. glMatrixMode, GLenum<5889>1 Z$ O+ M* D+ M; T# [. `
  68. glLoadIdentity  I4 w9 Y2 K9 X) u3 n' {3 W
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>- r$ t% e) y# q/ e& Q8 ?
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    0 B5 k% D8 ]8 `: a. G" l
  71. glMatrixMode, GLenum<5888>
    8 Z/ O% I8 S9 j/ |% E0 p
  72. glLoadIdentity- E( U; w1 ]% y% q! O' }
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>5 i8 O& L. E7 @8 p! A1 m, {
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>" C- a/ x& u5 e' f8 k
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
      D4 I! G" s' k+ ?- c
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>  V( L! Z5 q, x% ], q$ {, g( j
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    # g" G* {  `7 Z. M6 h/ c' j- f0 n
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768># |. A' ~5 V* i
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>9 G* h: m5 f' ~* J2 y
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
      I9 N- @& B( O" J8 b
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ' k: |: Q0 F! `! O( M4 d' d, D
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    # Q, s* k& |4 a# k
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    8 c7 P) d; P) I3 A9 x
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>0 [# T) b0 K& s# J- m6 K) I$ A) B
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    7 k. n$ v0 u0 R; M8 @  ~4 u: t
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>+ U# |) |; R" N7 T5 b9 k: O9 E2 \
  87. glClear, GLbitfield<256>/ i, i; _9 h3 r0 w
  88. glShadeModel, GLenum<7424>
    * l* \' p% R6 G' C) w
  89. glDisable, GLenum<2929>; M+ A- [8 H* a3 h& S
  90. glDisable, GLenum<3008>
    7 |) d/ w, t/ G8 p1 O
  91. glDisable, GLenum<2896>
    3 X3 i; Q: b' Z. L
  92. glEnable, GLenum<3042>
    $ Q. Z( _3 L: ^0 ]
  93. glDisable, GLenum<3553>
    3 {: G' J8 U# |8 j; @. {  G
  94. glBindTexture, GLenum<3553>, GLuint<631>. U/ i! D+ S5 D- I. @1 O* b  a$ [, c
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>. g1 X7 k8 Z# c
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    8 G; \: C' K7 |+ r# U
  97. glClear, GLbitfield<16384>! ?, @6 X8 Q! {* F* n* ]: f
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    4 P) m& w% m5 b2 T) e/ a' h8 f. }0 v
  99. glEnable, GLenum<3553>5 O6 n: J1 Q2 ?) D6 L/ X1 c
  100. glBegin, GLenum<7>1 D2 L# S- v' b( j2 ]
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    : Y2 U" }1 h( m+ O
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>4 Z9 L% p6 ~: [; r9 K& ~0 |0 Y4 r
  103. glVertex2i, GLint<0>, GLint<768>1 z% `' A3 N- ~& D# I
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    " Y' u' D4 r7 |- k  F/ i) m
  105. glVertex2i, GLint<1024>, GLint<768>
    ( _( i. ~6 H( V( Y' P3 L
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>4 a( `4 ?9 G9 t+ o
  107. glVertex2i, GLint<1024>, GLint<-256>0 Y) q1 K2 R1 u/ _
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>) K9 `+ V7 U* i! z( ]( v& i
  109. glVertex2i, GLint<0>, GLint<-256>; J+ K) M4 w, y0 |1 r, }
复制代码

/ y+ q9 i$ J! n: @) k. O: N) B8 [* L7 Q- e; d





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