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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 - b; e1 e1 V: x1 U4 a
* u7 F) t/ ?. z( H: D; t
本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,9 }  b; |6 {8 D+ o  s
游戏应该实际只用了其中1个,暂时作下记录。
6 |/ L1 A% }* P$ R5 T
# ]# p/ y/ m- L2 h- _4 Y- d0 v0 ?# UDirectDraw是由bin目录下的ddraw2d.dll来完成的。
+ u7 V) B5 S/ K$ ~! O以下是一处的初始化代码) C$ y7 u: s4 e( q# H
  1. CSpace:100150154 W/ N/ m, c, r
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    9 ]8 P& y2 e5 x% O/ n
  3. CSpace:10015015                 mov     [ebp+lpGUID], 06 V; q; ?9 s; r! s! r% x0 z$ n
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    ; a. \8 P' X6 d) z! E! z
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    3 B0 D: g5 t) c% L1 g, e
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]# q) z7 T" i: Q6 V, P4 W! D
  7. CSpace:10015029                 test    edx, edx
    0 k3 b1 o+ D5 X$ }" U
  8. CSpace:1001502B                 jnz     short loc_1001503C
    + L: `* q3 L' Q" A% `8 @9 @
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]# M0 s& c3 a2 q1 u4 g& J
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    ' F- T% ]/ A2 n, i
  11. CSpace:10015036                 add     ecx, 8$ z+ D3 P* B/ Q. c  ]5 n. L
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx: R. w5 r/ n, T( y+ M4 Z  X6 S
  13. CSpace:1001503C7 L! w3 j" a( x5 L- J. E) z
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    , H8 Q! V0 X; y- J+ n; g  D- s6 L$ k) A
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]! @- b  F5 |; V/ b
  16. CSpace:1001503F                 mov     ecx, [eax+230h]( r9 m9 V# x* w9 U; _( `
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    % g0 p; X# u8 X& l$ [/ a2 |5 d
  18. CSpace:10015048                 push    edx
    ! j( W: {: m, j& N
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    8 }# R) F$ e1 `1 J  Z
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    7 h. k' X! k' _$ x" s
  21. CSpace:10015052                 mov     edx, [ecx+20h], y/ I# F( ]0 i
  22. CSpace:10015055                 push    edx, q) g& n" _6 L: _& v
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"0 N$ V; Y5 {  z/ o( }4 S$ z. a
  24. CSpace:1001505B                 push    3) s" z) R4 k/ w6 z
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]7 g- q) A& e% @* |
  26. CSpace:10015060                 push    eax
    6 s( n5 M+ ^% k9 M! G' k
  27. CSpace:10015061                 call    sub_1003882A
    " m9 q4 Y# X) j; T- Y! }
  28. CSpace:10015066                 add     esp, 14h
    " Q4 |, f8 h4 |: R5 u+ B; S. J6 r1 G
  29. CSpace:10015069                 push    0               ; pUnkOuter* \0 K7 N3 o/ i& Y3 m
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    / x0 ^/ d2 C) I7 [
  31. CSpace:1001506E                 add     eax, 1DCh3 Q7 }. F$ e) x" m6 ]9 A, N* l
  32. CSpace:10015073                 push    eax             ; lplpDD
    6 e' s/ [5 i" ~( a
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]3 @1 Q2 G* n' p
  34. CSpace:10015077                 push    ecx             ; lpGUID3 w* n; h4 n$ L; u1 |3 _
  35. CSpace:10015078                 call    j_DirectDrawCreate# X/ Y6 M6 J1 b
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    * Y) }9 o: p- e% @; ?4 b" ]
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    + |* t4 O* P. Y! O
  38. CSpace:10015084                 jz      short loc_1001509E
      L% l$ E$ j4 y$ C' Z
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    ' \, @6 U  V+ K5 V" |0 r$ @
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]9 t! X5 f+ E9 b( Y
  41. CSpace:1001508E                 push    eax
    " Q" R; ^$ u! M
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    * k. c" _# f' s( R
  43. CSpace:10015092                 call    sub_10038F3C6 i( G2 w9 t1 Y( D& U' i5 l: v* ^- m
  44. CSpace:10015097                 xor     al, al
    & n' y* k- e3 s5 `0 w- M; d( D+ u
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

8 S) H1 h- w' T# C% g7 ?$ T; [. L1 S4 N

, W; o% C4 \% q" c- Z4 c我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
: D* j4 P5 P9 d9 u记录到log_GL.out文件中。以下是摘录的一段。! ^; Q' B; N" u. |. A$ Y0 y# n
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
& ?% d, M; k5 U- F* B以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
8 \  B# R9 f" G3 c' d' H
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    1 S* \/ F8 j, N# s: T  m- {! b+ m
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    & `: k9 ?4 m2 j; w
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>* f; T  v7 P, h+ Z
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>' ~0 O  I: Y8 X, _. W
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>) o* j5 P  Z# y
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>" y  V& X# i3 O2 ^1 m( R
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    / Y& R3 _2 ]+ u3 p& `2 g1 f7 H: {% T
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ( L$ r' \8 N; ]! q. S
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>( J- u: d2 o# f+ Q' X) N+ N
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>" c; |$ B  f1 E4 ?$ R
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    " m4 T: K7 p4 d& _
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    9 O) ~# A& n/ t, l5 G
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    + ?+ d/ M- w8 q" t0 g$ Y
  14. glClear, GLbitfield<256>- Y( c8 Q  c( T# {6 }
  15. glShadeModel, GLenum<7424>& L$ B6 M% ~- `+ {/ a$ R
  16. glDisable, GLenum<2929>2 G" {: }; s$ S
  17. glDisable, GLenum<3008>
    ( e" q0 s, o& T
  18. glDisable, GLenum<2896>2 G0 T' ^' y, F7 ^5 U/ k
  19. glEnable, GLenum<3042>' h+ {8 G1 ?' `0 C
  20. glDisable, GLenum<3553>
    0 c" e9 Y4 P' [4 G4 y- I9 @
  21. glBindTexture, GLenum<3553>, GLuint<631>
    - I1 c1 W# t4 y! g6 {* F3 f
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    ' y# i8 V) E, ~# b1 A" _
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>" @' F( d9 y& w% E6 a5 I- T' j9 K+ [
  24. glClear, GLbitfield<16384>4 M9 @6 j* B4 m, v
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>* r/ O; X/ Z! I5 K
  26. glEnable, GLenum<3553>. @! `  }( d/ m2 M, L$ P
  27. glBegin, GLenum<7>
    4 H+ p5 a$ [& E2 Y8 M# r. @7 S$ ]$ T
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>9 h  W: a' y3 C& e: ]
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    ' |8 j6 B# s  Q5 o/ V
  30. glVertex2i, GLint<0>, GLint<768>
    ! _' E/ V$ |4 i6 \/ n
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    : r$ s$ T) d7 {; Y6 V
  32. glVertex2i, GLint<1024>, GLint<768>& h$ i8 a- Y. G  D# [
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>+ |# b# T: I& P% Q" B6 l
  34. glVertex2i, GLint<1024>, GLint<-256>7 R! y% D. V4 J. w) U
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    : c4 I2 k0 f' O
  36. glVertex2i, GLint<0>, GLint<-256>
    * I( J8 z5 B) O: Y6 j3 x+ z
  37. glEnd
    - S0 ^$ i" x) o( \8 V
  38. glShadeModel, GLenum<7424>
    4 a2 ^# @( L7 F0 m, Y
  39. glGetError4 v( Z- m! y' L$ g' |5 S
  40. glDisable, GLenum<2929>4 o9 I( [# H4 Q6 K5 w
  41. glGetError3 ?' N% y+ E& p+ o% ~8 s; O1 a' W; Z
  42. glBlendFunc, GLenum<770>, GLenum<771># k, e! l7 v" e1 W
  43. glGetError
    7 U+ E' t  V. L
  44. glEnable, GLenum<3042>
    ' u5 ]8 J9 K# i; s/ K' |0 w
  45. glGetError& }: _$ e9 O, Z; x" p) ]
  46. glDisable, GLenum<3553>
    1 x1 x2 ^# m7 ^0 V" Q
  47. glGetError5 r3 W1 C4 u0 V& R
  48. glBegin, GLenum<7>: ~+ }" d& r4 }6 U$ y3 z* D
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>0 [. J% {, J! ]7 Y
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    3 S$ U9 j: i$ n4 G
  51. glVertex2i, GLint<0>, GLint<768># ~9 S5 N4 G  ^5 Y& ]3 W
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    ' z9 n' H* J. l
  53. glVertex2i, GLint<1024>, GLint<768>
    0 W6 W0 L2 J1 r9 R. B/ |1 u
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>/ S7 }5 q7 W, b
  55. glVertex2i, GLint<1024>, GLint<0>7 _$ l  W* d3 f9 M( E8 I
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    ; s5 k' J0 ]2 h
  57. glVertex2i, GLint<0>, GLint<0>' q% F5 b$ `7 O8 K5 v
  58. glEnd
    ' S+ \, n# m0 V+ c6 k7 g! Q
  59. glGetError
    $ |" p" h# ]' @+ g! C9 T# P, S
  60. glEnable, GLenum<3553>
    / _) f+ {% j. ^* [1 {8 H
  61. glGetError3 S& U% S( I6 i8 c
  62. glFlush
    0 \# U$ G6 t; u# s9 V3 k# ]
  63. wglSwapBuffers- o0 a  Q% h9 S
  64. ---------------------------2 M4 F; U) ^7 r, W5 `3 F
  65. , HDC<-33484711>4 P% {6 l6 [  E" c. _, d% V/ t# J
  66. wglGetPixelFormat, HDC<-33484711>
    % d) v+ P& W* R4 D
  67. glMatrixMode, GLenum<5889>+ \  l- d7 K7 ?/ v8 K1 v
  68. glLoadIdentity+ I4 M' r5 F6 V9 r/ K
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>1 m- ?( K6 S0 Z! Z; a, H
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    6 y, g* G9 }$ y7 M
  71. glMatrixMode, GLenum<5888>( X% `0 s( D5 t4 [
  72. glLoadIdentity
    / o6 H. \, e# F5 X$ A
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    9 T2 C  S/ w  Q' N
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    - u7 Z( Q& Y' Q7 T- h
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    9 f  S3 t# e& H* {2 }9 C5 O8 E
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    ' I' j% j" R7 p& x2 {0 {& |9 X
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    7 G8 K! C7 U$ ]3 u+ K5 i
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    7 j* I" h; P2 N3 t; J
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    3 g: f- S5 t& g
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>! F& E% l9 r6 J2 @
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    9 @8 M: |  ?* }
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    5 a* ?+ T! P- G# y
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>4 g0 o& y) r% Q
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    # d) l& R' c& Q6 ~$ w) M
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>  }' ?$ n+ O% c, B
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>6 V+ R% h! S  P- C% x; j
  87. glClear, GLbitfield<256>6 }/ h5 b+ {% u) f" p, c
  88. glShadeModel, GLenum<7424>
    - A; H4 x( L) l& _; K) B
  89. glDisable, GLenum<2929>
      Y# M. W3 ^( a3 f% m
  90. glDisable, GLenum<3008>
    2 `$ G2 J5 b6 H1 T9 C3 S; V# n
  91. glDisable, GLenum<2896>
    # f% w" ]# p3 N7 a
  92. glEnable, GLenum<3042>
    6 W5 N; t  D7 F+ V5 Y; b
  93. glDisable, GLenum<3553>
    : l& {. ^9 @" _. @' e
  94. glBindTexture, GLenum<3553>, GLuint<631>3 b( W% ^9 a( @$ l  k, S* o5 c) M0 _
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729># t6 ?9 M- l* Y7 c4 b
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    - l1 ?! D# W/ n4 [% L3 [, l
  97. glClear, GLbitfield<16384>
    3 T& y9 V' f8 F, m/ Y
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    / D3 x7 _8 @- U" j
  99. glEnable, GLenum<3553>
    , F$ ]7 |$ |2 @4 X# P1 j! K6 N
  100. glBegin, GLenum<7>- I- ~+ P: q, Y, A$ j8 ?
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    " y, ]+ b2 ?- i' {2 u" S
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    * h/ f5 D5 s: B3 @1 N, n
  103. glVertex2i, GLint<0>, GLint<768>6 `" L) I0 Q. O
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>/ n& I' ?! ?5 W, B% a. u: p* O9 I8 H
  105. glVertex2i, GLint<1024>, GLint<768>3 P8 P! K1 z6 g; r+ ?+ B
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    : j* @" ?% F& O
  107. glVertex2i, GLint<1024>, GLint<-256>
    - @3 P) {) @  n& _& p! T
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    , x1 m  W. {0 M" Q% E5 B1 Q% @
  109. glVertex2i, GLint<0>, GLint<-256>
    7 v) U; k4 L6 K+ G7 T9 d
复制代码
. @& o- ]0 F7 |# ]* S
* m! w$ `" v2 Y( n) n1 ]  [- N2 {
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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