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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 # P7 m* S3 N. f5 s% y

0 x* q' j, l0 b6 s8 A6 }% e本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
' ?! q+ T: O7 K: d9 g8 z游戏应该实际只用了其中1个,暂时作下记录。* r7 w5 g3 Q5 L: {
. s$ N  m3 u% t  K2 j
DirectDraw是由bin目录下的ddraw2d.dll来完成的。
# b) c% _. {3 `) G) M以下是一处的初始化代码
3 P1 @3 T# i: Z( p
  1. CSpace:100150153 n7 C* G# [7 i* F; \0 I! d1 _
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j' k3 ]2 P( [1 F
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0, D$ L1 y) j$ a8 X+ p2 W* L: [2 d
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]5 a7 s8 f) I+ I1 J% t, C0 D& z
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    * S! P  m) I, R/ Q/ s
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    $ z( |7 o' r9 E* I, k
  7. CSpace:10015029                 test    edx, edx
    - M* B: m  r& W2 e6 N: l# w
  8. CSpace:1001502B                 jnz     short loc_1001503C' W' [: A2 `3 I  d
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    . q, B2 z; j  l
  10. CSpace:10015030                 mov     ecx, [eax+230h]& I. V# e+ J- y8 S3 u  N! @7 E( L7 a
  11. CSpace:10015036                 add     ecx, 8
    / X# E# P9 m, I
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx/ Z! |8 f, d5 Z8 Y/ E6 O
  13. CSpace:1001503C
    - L5 F( @! E7 E" f$ Z. z% A% x
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j) E" s% T7 w) v" v! h! T, K  F
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    ) N1 u$ g0 g) K: |* p4 X& F& o2 A
  16. CSpace:1001503F                 mov     ecx, [eax+230h]2 o7 Y0 |8 j6 @7 P7 V+ c5 G0 L
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]6 i& L2 W6 _4 ]2 x, X
  18. CSpace:10015048                 push    edx
    8 J4 {/ x) o' O$ C
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    & v% t. s7 n: K+ i9 P) J8 Z
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    $ b* S$ P" }# G
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    5 W) m; S$ E3 Z, n; H
  22. CSpace:10015055                 push    edx  B. |1 |: d6 ^2 I4 p9 L
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    4 ~4 B  }/ L* ^' H! d
  24. CSpace:1001505B                 push    3
    % M( U' V5 Q4 X2 l1 g6 `! z
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]- S' i0 r( K; L& G9 f
  26. CSpace:10015060                 push    eax
    + `: ~0 C1 _( n, ]
  27. CSpace:10015061                 call    sub_1003882A
    7 x9 F' d; K6 C; d0 b
  28. CSpace:10015066                 add     esp, 14h
    , H/ y5 ~/ f% ^3 f0 l9 _2 q7 U& x
  29. CSpace:10015069                 push    0               ; pUnkOuter
    , @, \; s( f' Y) Q1 l
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]: }! K) a$ ]+ g. [' v& S* C$ Q( q! F
  31. CSpace:1001506E                 add     eax, 1DCh
    ( o- j; X  G7 ]% H( T) m
  32. CSpace:10015073                 push    eax             ; lplpDD9 d9 y3 g. f1 }) T) {) f. d5 l5 z
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    2 O6 f! y8 d4 p+ v6 z* Z8 e) [
  34. CSpace:10015077                 push    ecx             ; lpGUID4 b# M5 D1 ]% t- ]/ c$ s/ ?
  35. CSpace:10015078                 call    j_DirectDrawCreate
    ! D. k3 U; G8 G  f
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    % w; t! s5 v5 {2 X" J0 y
  37. CSpace:10015080                 cmp     [ebp+var_14], 0& L9 }5 B- @; i2 ?+ C) c! T
  38. CSpace:10015084                 jz      short loc_1001509E
    ' y0 R6 |% \# v% T6 j  h3 i
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    , J. ?+ _  O: N) F6 X- j, d
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]2 a* C' {, L% D4 |: G( C: x
  41. CSpace:1001508E                 push    eax  E+ S, Q/ b2 a% j+ ~
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]+ @) F$ r+ P( C
  43. CSpace:10015092                 call    sub_10038F3C0 j" b+ n! j6 i4 L- t
  44. CSpace:10015097                 xor     al, al3 W" n$ Q+ s: S# S. K1 b9 \& x0 W
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

/ F: f  n9 Z1 f. J0 u* d3 l# e) w3 n9 h  R+ h- V

# s& A7 j3 |* O7 r我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log." l5 {2 P0 Z- O/ x) H6 K
记录到log_GL.out文件中。以下是摘录的一段。
# k  n# n$ j$ @9 r6 S$ g* `/ u. y2 {我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
. h) [! n3 [7 T# t3 u( \以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
' E, ?+ }* c4 b. q* C5 g& ~
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>! y1 X; g6 F6 \* j
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    - ~( s( L% X! H3 f
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    ( [+ r' Z2 I' @" Z
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>% d2 s! U6 G$ p
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    ' b& p4 s. T+ s4 c
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>, C" h9 o) v# w3 G1 I7 ~& S
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>8 L+ d: G5 @3 Q. R& j- x
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    , M( H" _: m( U7 S/ l" n
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    7 B8 d2 y+ j. ]3 h9 \& W- j# }
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    + f  l4 S6 A% Q/ y, b( y
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>  k9 H" T0 [# D7 `
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>" S1 B2 a+ Q( e* _7 b
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>) y. {& Y% d1 ^3 f  k
  14. glClear, GLbitfield<256>
    7 T8 Y: ~7 l% E2 ]+ `$ ^$ M
  15. glShadeModel, GLenum<7424>
    5 v  Z5 j5 C8 w) B- E* x
  16. glDisable, GLenum<2929>' e% F" j( D4 u
  17. glDisable, GLenum<3008>/ ^3 `6 T6 q6 h+ H3 b( c
  18. glDisable, GLenum<2896>3 E3 U/ W6 W& t3 Q/ R! U  [. p
  19. glEnable, GLenum<3042>8 N' P6 @) a2 ^* E- k, Q
  20. glDisable, GLenum<3553>
    - ~+ f$ n) c( B- K
  21. glBindTexture, GLenum<3553>, GLuint<631>
    ) v1 e; p0 I: H6 w
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    * I) i8 n2 r: }+ W
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
      C- ?9 Q. s! a. @: q% X9 Y
  24. glClear, GLbitfield<16384>
    3 Y( x) E6 J! b1 L- L2 ~
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>4 [6 \! B  a+ D& D
  26. glEnable, GLenum<3553>
    ' n8 j0 f0 U1 l
  27. glBegin, GLenum<7>
    2 V  {& K$ T1 \% ]3 u9 l
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>9 x( v2 p* _* J0 e! s5 V
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    ! F% P1 Z6 a, C( x, Q
  30. glVertex2i, GLint<0>, GLint<768>. n" _3 x) ^7 G9 X( F. v
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    % B; u2 M+ H) ?3 s% G
  32. glVertex2i, GLint<1024>, GLint<768>& c0 G0 q# n, C9 o1 M
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>0 d0 G" O5 A# M( s
  34. glVertex2i, GLint<1024>, GLint<-256>7 b# M- H2 R" Y7 \% W- [* b' T
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
      E1 L' B" {& L2 |
  36. glVertex2i, GLint<0>, GLint<-256>5 x# t& p, F5 n. U" C
  37. glEnd
    3 ?: q5 m$ c* g4 [$ x9 i. }& w8 ^9 `
  38. glShadeModel, GLenum<7424>
    7 X. @8 k: B5 d
  39. glGetError4 A, ?4 q2 U) j$ B: [: K" S
  40. glDisable, GLenum<2929>( N9 L% @7 ~9 W" x. f8 `1 j* D
  41. glGetError* s! ^/ G% n; c$ S2 `
  42. glBlendFunc, GLenum<770>, GLenum<771>
    / i' K# Z" w& F( \, c9 z, R
  43. glGetError
    . g5 _/ @: a8 r1 Z& ~
  44. glEnable, GLenum<3042>
    5 p' R  R2 |' h1 z. k
  45. glGetError* m% y6 m" u* M3 g- L
  46. glDisable, GLenum<3553>( @7 V- _* h9 Y1 x4 O
  47. glGetError+ j/ v. H4 C- L, m
  48. glBegin, GLenum<7>
    ; B( N9 A& j  G) n
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>) \3 A4 z# G9 C8 {
  50. glTexCoord2f, GLfloat<0>, GLfloat<0># c6 X/ `# ^. }  Y3 z+ S
  51. glVertex2i, GLint<0>, GLint<768>
    % w: g  ^4 f7 W8 I
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    & l0 c' m+ [/ V( z0 @5 @0 _
  53. glVertex2i, GLint<1024>, GLint<768>3 u  M! z- _, l, V6 s
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ' B" T: h  J, R6 B" y
  55. glVertex2i, GLint<1024>, GLint<0>7 h  E# E: a( H+ B6 J) Y& b
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>1 y1 T* W0 {. g% e
  57. glVertex2i, GLint<0>, GLint<0>
    & r, @/ U6 N8 ^3 H& w7 Z# w
  58. glEnd
      ]5 n7 `' B8 @
  59. glGetError  c  a; x9 w9 T9 T6 J
  60. glEnable, GLenum<3553>
    4 X: r1 u% `+ o$ K
  61. glGetError6 f2 e  F  {  E4 f
  62. glFlush+ ^- {- ^5 u) p$ {9 ]5 \
  63. wglSwapBuffers
    . e3 j  }# t) u$ f) i. z
  64. ---------------------------
    2 W5 O( y; y# \& {7 u# P$ o! Y; F
  65. , HDC<-33484711>  s: G: S4 d" W
  66. wglGetPixelFormat, HDC<-33484711>
    . V6 z: |! r$ E; T  K
  67. glMatrixMode, GLenum<5889>6 o0 d6 z& V$ z& Z0 G! A0 X. g! ]5 w
  68. glLoadIdentity' S8 ^" ~4 k" U) Y5 w% l
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    , h3 \: Z- x* |' o, o
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    ) x5 N9 u8 _' M; E1 H. {
  71. glMatrixMode, GLenum<5888>3 Q' n; J- M+ P4 E% B: b  @1 _
  72. glLoadIdentity9 `$ J9 A5 B; S/ t8 s  s
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    : ?* I" U" V4 ?: T! `1 o1 t* X
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>) F& T' Y. ~* t# n4 p! L* M
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>1 A. p3 U+ S' I4 C4 O* _
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>4 L# R' O/ @8 v: V5 q
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>% ^  ]" z& T' ^. G5 [
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    3 o' C: A# Z; Q: S8 w1 e
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    ! a' j* l% T4 B
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    + N* w8 s, G; B' S, l' C8 `
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ! G& W8 o3 [. `5 ~8 b. t% H6 [" W% L
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    . g5 e. R0 B9 b/ Y: E+ I
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    3 j, D- ~. i, U; @; ?0 e5 ^% b
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    + T7 x. ^) N. i# t7 n
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>* D; K0 m" b1 F) j1 i' u0 ~: T) c
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    $ d3 H- N( h* U! t0 \
  87. glClear, GLbitfield<256>
    $ Q2 _: {7 b, `4 z6 v& h& h
  88. glShadeModel, GLenum<7424>% B6 M9 r2 X. W5 m
  89. glDisable, GLenum<2929>
    3 F; }0 [8 H5 {6 A( V
  90. glDisable, GLenum<3008>
    , T8 i2 \4 L) \' A4 p
  91. glDisable, GLenum<2896>0 O2 v, n# ]6 `( P9 ?
  92. glEnable, GLenum<3042>
    4 ]' ~/ c, |% a! Y& c! R9 p4 J+ [
  93. glDisable, GLenum<3553>
    0 p9 y  j. C2 A, P: t
  94. glBindTexture, GLenum<3553>, GLuint<631>6 P. t, G/ |4 \7 i, a
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    8 g4 R+ f# G5 y3 x9 ^. X; B
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>. C' b/ e8 Z: d- O2 y
  97. glClear, GLbitfield<16384>& d( n# s/ M4 g" C0 T" n9 \6 ~8 w
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    2 H# N5 ~! |( G' h% g
  99. glEnable, GLenum<3553>7 _1 n7 @9 M6 y8 e9 H- O
  100. glBegin, GLenum<7>& R2 [7 n9 ?; k/ p* ~1 @6 y
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
      U& ?+ [, h7 O6 }. f
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>8 ^" K) h1 y- V: [. J
  103. glVertex2i, GLint<0>, GLint<768>2 V- @$ I+ M9 H- h7 G
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>7 |5 z4 c9 I6 Z
  105. glVertex2i, GLint<1024>, GLint<768>
    - j9 P$ B  M0 }0 ?) G& G" @
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    & E; i% w, O4 `8 p" u: B* z  A+ b
  107. glVertex2i, GLint<1024>, GLint<-256>
    0 m! |1 O1 N& c; ^& }
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    ' A* w, L2 a& Q  J2 K
  109. glVertex2i, GLint<0>, GLint<-256>
    - y" c- B+ a! a% S9 ?4 Y
复制代码

% |( b. X' y) G# ^
4 ~: Y& |/ x8 h0 z8 Z3 L$ u; g: G
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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