设为首页收藏本站官方微博

建议 【Opengl游戏汉化 #1】 纪念品(Keepsake)图形引擎分析

[复制链接]
查看: 434|回复: 0
打印 上一主题 下一主题

[建议] 【Opengl游戏汉化 #1】 纪念品(Keepsake)图形引擎分析

跳转到指定楼层
楼主
发表于 2023-8-25 17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【Opengl游戏汉化 #1】 纪念品(Keepsake)图形引擎分析

本帖最后由 shane007 于 2023-8-25 17:31 编辑 2 y3 l3 [2 q# y

3 X3 D: G+ \/ O本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,& b7 R' ?" j, O1 m# n: O
游戏应该实际只用了其中1个,暂时作下记录。
2 H9 J5 c8 Y1 B" @' ?+ r/ c
$ w5 E# W  f9 v5 P, V9 \DirectDraw是由bin目录下的ddraw2d.dll来完成的。5 N+ D0 `2 M; K; D7 `
以下是一处的初始化代码1 d$ O! ]5 ~9 R) O% x
  1. CSpace:10015015
    * P, p5 Y" ^% c  s
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    / c6 q1 R. g- I4 x$ m
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    * F) [9 b' W: d7 U
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
      z# G2 k; f( E, s% `0 |
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    - L6 T( w( X# e
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    , h; x  H2 V4 A5 ~7 {
  7. CSpace:10015029                 test    edx, edx9 h) o  u. X/ ?3 g- j+ j9 N
  8. CSpace:1001502B                 jnz     short loc_1001503C4 X  \; w& G4 |9 `4 X
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    & S% y% }$ e; z6 z7 Q
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    ) n/ m8 i$ F7 N3 ]% f# b
  11. CSpace:10015036                 add     ecx, 81 h) I! u4 G6 L* W( N4 r
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx- a% e) \" B0 C4 R! G: l
  13. CSpace:1001503C
    ' n2 l+ j. n( ~% u/ E* [( k8 }
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    ) t; D6 J- S3 g/ y  l
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    $ {- i, e- Y$ N* y- c$ C4 p
  16. CSpace:1001503F                 mov     ecx, [eax+230h]' f# o- O, M* J( U2 L
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]& Z; ?% J. r& _$ f
  18. CSpace:10015048                 push    edx4 f' \8 p- d% r7 r! P* N
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]8 ^5 T4 W- [- p$ d
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    ' g) r. I+ G1 p7 Q6 D& L
  21. CSpace:10015052                 mov     edx, [ecx+20h]: N- r4 l6 X' o& F& m
  22. CSpace:10015055                 push    edx
    % m. _1 _5 Z9 b3 m4 U2 k- W
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    5 f0 J/ g+ H) w& w. a/ B
  24. CSpace:1001505B                 push    3" Y4 h6 w& L; [
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]* i/ |, D9 S2 g* N! B' X
  26. CSpace:10015060                 push    eax- V. \& Z4 E" g, b, r0 B) X& M
  27. CSpace:10015061                 call    sub_1003882A1 V* {$ \# k* |' n
  28. CSpace:10015066                 add     esp, 14h0 M7 u6 \. P3 o8 M
  29. CSpace:10015069                 push    0               ; pUnkOuter9 h) f& T# V) G7 \
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    : k9 T$ x! J2 z  H! A
  31. CSpace:1001506E                 add     eax, 1DCh
    4 q9 T4 w& s( y4 e6 i# e
  32. CSpace:10015073                 push    eax             ; lplpDD  f9 Z2 k+ a8 y9 I
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    4 ~( a* b* i" m7 p: D1 y% ?; z
  34. CSpace:10015077                 push    ecx             ; lpGUID+ k8 s# x+ u* k7 {; A
  35. CSpace:10015078                 call    j_DirectDrawCreate( ]6 \& Z) m) W
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    7 j9 J2 b2 |) M, `, _* X
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    * Y, P- b+ v7 U6 W" {
  38. CSpace:10015084                 jz      short loc_1001509E
    * n+ C: C- Z9 w: b
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"$ ]  o9 v/ _) I3 G4 W7 D  x0 E
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    $ C7 b5 K% o# z: M
  41. CSpace:1001508E                 push    eax) ^$ D4 W3 h, p2 a; V
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    ) ^* n* J+ \. }- q, o& h
  43. CSpace:10015092                 call    sub_10038F3C( v4 o+ s; u: F0 g! L
  44. CSpace:10015097                 xor     al, al
    ( m7 ]* ^( m2 g
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

/ b; u2 F& x6 w( A# ~4 k  }/ x8 K% O5 B2 I" n8 `4 i

! O: x0 O" ~) {* N" ~9 r( L我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.& H1 d$ w/ @- n; U# i0 \. b2 b
记录到log_GL.out文件中。以下是摘录的一段。& [0 t6 C+ W% K$ N% v
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。. n0 n, ^9 d7 T
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
0 f# i$ Y' a3 }+ X! a% v
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0># |, U2 X/ _* N
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    # {8 d* R8 r$ [& ]0 K
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>& ?! E4 m, C7 o5 _
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    " \1 ]% d, f4 ]% c4 r2 \
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>  I+ X/ E5 A: z
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    2 D2 P  J, V; q% ~, a: d
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>- m4 o2 \4 P- c/ A4 a4 \
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>7 E! \$ Q; x" h8 H$ s; r
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>7 }7 P! h: p6 z- S  v9 `
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    6 k! A' A- U! W- f5 ^
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>! }  {. G. P6 S* j
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>" v2 F. ~% `. j' D2 h
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>: A" o( A, W' p5 U) Y
  14. glClear, GLbitfield<256>- {0 F/ C" M9 j( F9 \! J
  15. glShadeModel, GLenum<7424>
    - ^  S: m/ s3 |2 {$ G
  16. glDisable, GLenum<2929>
    5 G8 o' D- j7 y8 l6 L9 K
  17. glDisable, GLenum<3008>; z: o$ e* s4 I  A) b6 W# m  u
  18. glDisable, GLenum<2896>9 i6 I3 w, [; J
  19. glEnable, GLenum<3042>' n% n! [7 f& L  |
  20. glDisable, GLenum<3553>/ x: C$ g6 _; h+ ]% S5 |2 O
  21. glBindTexture, GLenum<3553>, GLuint<631>9 R2 q9 {* r. k
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>: d  [- H# l- e+ z4 N9 q
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>* o) Z+ V/ E: O# _
  24. glClear, GLbitfield<16384>
    # ~5 C1 t! l. M7 p5 r
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>, e( a: R; r; c7 f
  26. glEnable, GLenum<3553>
    ; R9 s' }8 C; F( }6 P3 E
  27. glBegin, GLenum<7>
    3 `* y& Y2 c0 z3 u' y$ w9 w
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>% N0 w* f' D  Y: `2 d& E( n
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    9 v$ G6 V5 n4 J( p9 D7 A
  30. glVertex2i, GLint<0>, GLint<768>
    " x' {9 s) V" u/ k  e
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    - Q4 g$ x; P6 q/ v" V' S1 ~5 o! v7 |
  32. glVertex2i, GLint<1024>, GLint<768>
    8 u" F5 M" y0 C
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ; C. I8 C  |3 `
  34. glVertex2i, GLint<1024>, GLint<-256># M# x2 G3 O& X
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>) X, x7 ]1 U4 T1 w% x2 K
  36. glVertex2i, GLint<0>, GLint<-256>
    % s" b' Y- y3 I* }. G
  37. glEnd
    5 J5 O8 n3 V; n
  38. glShadeModel, GLenum<7424>$ P2 P- O7 [3 t4 L
  39. glGetError
    % M' U/ r! s2 J# N1 O
  40. glDisable, GLenum<2929>' O* v- Q4 K3 Y  A1 s7 B$ |
  41. glGetError0 d1 @( z6 l, B9 j* C# h, D
  42. glBlendFunc, GLenum<770>, GLenum<771>+ [' Q$ }8 o' A1 k! W1 U
  43. glGetError2 W2 Q: W6 [5 `8 D4 p
  44. glEnable, GLenum<3042>
    * @3 W+ G9 C2 }  v+ B5 S5 L5 @
  45. glGetError0 h$ c+ X, q; c5 o( k
  46. glDisable, GLenum<3553>7 z. L, K' C9 C. s7 w  n  A
  47. glGetError% H8 q3 Q2 _$ i0 r; h/ v* e/ z
  48. glBegin, GLenum<7>
    0 F2 A- f' W9 f) \; _) x: [& b
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>- {6 f% R* R1 P. u- R
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    + f! j- G+ c+ L0 H! n+ Y7 \
  51. glVertex2i, GLint<0>, GLint<768>
    5 b! J: r! U9 e# `* v8 P; |
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>5 W. I2 j' E& R6 S+ F! r
  53. glVertex2i, GLint<1024>, GLint<768>1 R- k9 K9 W' }. W$ W, |
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    7 A- P# y0 i( \6 F" U
  55. glVertex2i, GLint<1024>, GLint<0>  Z- v2 ?1 `9 n
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    - f$ V, c. \- O# C# Q
  57. glVertex2i, GLint<0>, GLint<0>. Q# {- R. R# }) u
  58. glEnd% a( \8 N  ?% j* O. e
  59. glGetError) a* o& ~* K! p
  60. glEnable, GLenum<3553># d1 ]3 c& C' l& Z0 p
  61. glGetError' q- I: b- B  ]) r5 b2 z' z4 W
  62. glFlush3 d  y4 Z0 T; n9 h' V9 c
  63. wglSwapBuffers8 l, e  u+ n4 `. O1 k2 h
  64. ---------------------------' U: K& ?; q% N2 j
  65. , HDC<-33484711>
    , r. T4 M5 ~# {  W4 a
  66. wglGetPixelFormat, HDC<-33484711>3 W. P- d: v  t6 j- `* x3 Z
  67. glMatrixMode, GLenum<5889>) J4 g+ P) C2 v6 a( V
  68. glLoadIdentity
    ( J' Y4 k4 h  z1 v( ~
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>  c1 J: G5 ?1 O: a- A3 S' r9 @7 C4 i
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    3 A2 y& D$ \  I+ k3 d
  71. glMatrixMode, GLenum<5888>8 E& E" K; L& X& }5 C
  72. glLoadIdentity( G3 K! F7 ~4 d1 q
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    4 C& n; P8 n4 N
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    # }. R4 E' f) W7 I% W
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890># W9 `( U; i/ f5 M
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>: @4 T" E: M# K) i+ t6 J
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>9 n( n, Y$ u% S! ^4 e
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>& c/ A3 ?7 _* A4 e$ j- C# k
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    - ]. Q, |" _8 g( e8 l. v( X# v
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    6 a0 m5 {0 a! Y$ B8 u: W9 m  r
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ( m7 E1 I- |" I1 A/ i
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>8 t1 ^; V# G3 P" u, b5 }& o1 o/ i
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>. T0 S& O* {6 `
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    7 K7 x  w' r1 P+ S
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    7 D9 h: y) g! Q. K
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>8 l; O8 D+ f9 f! S2 u
  87. glClear, GLbitfield<256>9 I- l0 |) P- s
  88. glShadeModel, GLenum<7424>2 n1 e! K. v- p/ d# s
  89. glDisable, GLenum<2929>
    - D: `6 g0 u8 `$ O
  90. glDisable, GLenum<3008>+ K" i. C" B/ D* n: I8 {
  91. glDisable, GLenum<2896>, T/ L% R  M# o% j/ f. X
  92. glEnable, GLenum<3042>
    1 G4 M9 h; s$ D: H
  93. glDisable, GLenum<3553>+ M$ Q, e7 Y( m; S% D+ ^, y
  94. glBindTexture, GLenum<3553>, GLuint<631>
    0 {6 t* _/ M$ `- h9 X$ ~  |
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    / r* Y! j7 M8 |
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>6 ]$ a4 q$ O' \9 J7 l1 n$ \
  97. glClear, GLbitfield<16384>
    5 i3 ~3 z' E6 s9 f
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    ) ~" I7 u9 j+ [" [/ ?
  99. glEnable, GLenum<3553>1 T9 |% d  w/ D3 y" X$ Z
  100. glBegin, GLenum<7>2 i6 G' U) U  g* F6 X( d5 V( U9 C
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
      q" K0 t0 j$ b
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>7 ^+ q4 Q; L1 ~: _
  103. glVertex2i, GLint<0>, GLint<768>% {. t2 a9 f2 v, C; L
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    + @. Z+ i8 @( S0 }, w
  105. glVertex2i, GLint<1024>, GLint<768>
    / l* B* k2 G1 A0 X/ R
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>2 q+ a- z4 J* o! I4 O  k
  107. glVertex2i, GLint<1024>, GLint<-256>. [4 b0 @8 G# h. g
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    ! ]. @6 W! b0 c" j
  109. glVertex2i, GLint<0>, GLint<-256>
    * c% X' d- _! c" h  W
复制代码
4 c5 D% L* U2 I& p
$ H7 ?" D, c$ S- w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表