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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 8 r- R  d3 P' m& ^

" o. [1 Z* g( Q1 U! G6 V! Q: V* K本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
$ R' ^. l2 w  B# E游戏应该实际只用了其中1个,暂时作下记录。
8 i$ g, W  R  T3 _4 I8 O
) F4 C5 A9 Q0 I! A3 HDirectDraw是由bin目录下的ddraw2d.dll来完成的。
! Q" z# `3 v3 H: o. @6 D7 u$ B以下是一处的初始化代码. ~# t% i' C' [( Z
  1. CSpace:10015015
    8 d& s! O; ^6 P- I: p8 Q
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j& Q% Y  N) I: {3 X7 U
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0$ S" L; w8 |7 v* B5 ]
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    ! F4 N1 M; ^+ r* V. V8 ^
  5. CSpace:1001501F                 mov     ecx, [eax+230h], t# X! d% d* T0 @$ o& b* O+ [
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    " s4 R$ W9 p. s* ]% _/ W+ f
  7. CSpace:10015029                 test    edx, edx
    + n" L! [) \$ Q7 H. o
  8. CSpace:1001502B                 jnz     short loc_1001503C3 ~9 z+ J5 L6 Z- H' H) W/ z* U6 H8 z
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]0 r) A" n& y. T$ `$ X
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    1 l( r5 s0 [8 J, V
  11. CSpace:10015036                 add     ecx, 82 e9 k8 v% W, Q6 [# n
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx, j' C8 F7 W! z/ Z" y
  13. CSpace:1001503C
    3 Q; h" Y1 ~' u6 c
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j" A2 M* x9 x- o, s/ l
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]" u+ q% ]% O9 F+ [  ~7 W
  16. CSpace:1001503F                 mov     ecx, [eax+230h]) f7 E* K  X4 I% e; c4 @8 d
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    8 [  i  u& N: _: d8 S& t8 J* t
  18. CSpace:10015048                 push    edx
    $ N" A9 a. Q, x# D. C
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    6 J  B9 s; ?/ q- q/ `/ M, p# I% S
  20. CSpace:1001504C                 mov     ecx, [eax+230h]# x2 y( C: r# c, M2 `
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    1 h& M' E8 O" g, V' M: K6 t
  22. CSpace:10015055                 push    edx
    * Q/ [6 d! i+ e
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    + E/ r! Y) o7 `# i
  24. CSpace:1001505B                 push    3& M" M7 Q2 b. u( [  F8 C3 W
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    . q! c2 c, g) \# _: [+ W9 n
  26. CSpace:10015060                 push    eax6 _, l. I+ \7 O4 k$ @" t
  27. CSpace:10015061                 call    sub_1003882A
    ' ^+ Y5 w9 a1 l! U- l7 y9 o
  28. CSpace:10015066                 add     esp, 14h2 I0 y, j7 S8 j7 Q
  29. CSpace:10015069                 push    0               ; pUnkOuter
    ; j1 F9 w. j- o; S8 W: I' n! D
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]: l  u8 z2 ~% ~2 C' s
  31. CSpace:1001506E                 add     eax, 1DCh
    4 h; Q& z* Y2 q
  32. CSpace:10015073                 push    eax             ; lplpDD- V" f, F5 a8 @" L3 @/ o: O
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    . h4 H  Z- X8 ~* F2 }1 N
  34. CSpace:10015077                 push    ecx             ; lpGUID% }( I, d6 r! o# @
  35. CSpace:10015078                 call    j_DirectDrawCreate4 K/ A4 B: ^. ?$ Q
  36. CSpace:1001507D                 mov     [ebp+var_14], eax/ b7 I2 @0 |, z( A3 D0 b. T9 o
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    $ ?2 |/ @  w) Q; ^7 K9 [6 V3 e) |. z
  38. CSpace:10015084                 jz      short loc_1001509E' h7 W( z8 G" S& X
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    ' A0 B+ [  |( f* }2 [
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    , z# {6 Z! f% b7 U
  41. CSpace:1001508E                 push    eax) t1 b2 \- r- w6 S) @
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]$ g7 @; p0 J7 ^
  43. CSpace:10015092                 call    sub_10038F3C$ M; a/ K  k" @" [: F8 L
  44. CSpace:10015097                 xor     al, al
    ! l! B+ G" W0 V/ a3 q: T
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

* D! T! `# r: a" Y5 {0 A2 ?& }
3 s9 Y4 H8 |( J$ P! ?3 c) M
; `( \) ]8 H5 Z0 k' [. H; o我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
2 T5 @3 a2 R: p  p3 ~2 P  R3 a记录到log_GL.out文件中。以下是摘录的一段。
+ g$ Y; X" a% w; f8 ~. K5 f我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。$ |/ m# X, n- i5 l( p
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?. S4 w; }# M8 _! r& o1 Z$ Q
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ) r8 |6 x$ Y! Q# K+ j6 j/ i# _0 E
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    8 ]: z- b$ t  q7 J; H. [- W
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>+ N1 [% g) Y  e6 `  |- L. b
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>/ {' \% V5 [/ s: g! V% L' l3 @3 @6 O
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    5 N# q- b. I4 s* T5 e, ?
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    6 r) L# x& \+ d3 s; d
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    & Y( x5 |* _3 Q
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    # y% u; I1 f/ V/ ~
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>2 S: O" o  g# h
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    ' [3 G' g8 |( v$ d" h9 c5 y6 h( T
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>) q1 N% C( x, _7 l5 ^5 f  ?2 ^2 z3 R
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>1 s0 U& `, B6 D! S2 s2 D
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    1 J/ n* H3 a  Z$ J6 e
  14. glClear, GLbitfield<256>1 e' ]- o( w+ |* |, ]/ a( w. r; P9 i
  15. glShadeModel, GLenum<7424>
    5 U  C, \6 ]) o/ I, g  g6 G
  16. glDisable, GLenum<2929>
    ; @. x+ b) {/ o; c- Q
  17. glDisable, GLenum<3008>- J- U5 [3 ~9 L- @! s2 @
  18. glDisable, GLenum<2896>9 o1 A  [1 D8 \3 g, ?* k
  19. glEnable, GLenum<3042>1 Q4 \( G% `; k+ U" G  k& e$ E
  20. glDisable, GLenum<3553>
    ' m9 w$ z9 p% L; A
  21. glBindTexture, GLenum<3553>, GLuint<631>+ Z5 g- o/ J$ ~
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729># ^( J6 s3 L0 I  Y1 K, C1 V
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>! d% K) L6 }/ a! b5 v- g. Q7 O
  24. glClear, GLbitfield<16384>
    , y8 l6 w: G8 e
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>6 f  \# N7 u* K' R# R" e4 f
  26. glEnable, GLenum<3553>
    8 c1 E$ I- {+ I* X0 O( b
  27. glBegin, GLenum<7>1 {' s/ X& h# ~
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>" U$ F) W5 V4 |' \- ]% y) k
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    ; ]8 |) _0 x& H, W3 n8 y
  30. glVertex2i, GLint<0>, GLint<768>4 Q& g8 N* W, l9 ^
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>/ C# P0 E, e) f" ]  t8 V7 K
  32. glVertex2i, GLint<1024>, GLint<768>: ^/ ^$ m* J8 c1 q7 t, G
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ) w6 p  o+ G; L' }# H" ?% g! _
  34. glVertex2i, GLint<1024>, GLint<-256>8 l0 k. z9 B; \0 v
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>4 w0 Q3 U( \5 S. n- _
  36. glVertex2i, GLint<0>, GLint<-256>/ T8 e0 M9 p& @
  37. glEnd; |- s" ?5 M, A5 s/ F6 C8 s
  38. glShadeModel, GLenum<7424>& ^1 t, [; H0 S# V5 w/ m/ e
  39. glGetError
    * o1 O% y+ v- o6 O
  40. glDisable, GLenum<2929>& P+ {+ V. d( T/ [
  41. glGetError
    7 M. k8 m( K. |9 y" H  Z* [" `
  42. glBlendFunc, GLenum<770>, GLenum<771>1 y- x- u4 r' N) @) z# B8 S
  43. glGetError3 T8 a7 C$ x( N  T: E8 k
  44. glEnable, GLenum<3042>" Y5 Q! I3 F0 h9 P0 E1 _& O7 N
  45. glGetError
    & w* c2 l! N* G2 Q: p: }
  46. glDisable, GLenum<3553>
    2 k4 x0 \5 Z9 I: q3 m
  47. glGetError! e, }& z1 P  f0 C1 n. R* L5 A
  48. glBegin, GLenum<7>" t9 J" ~3 W9 t8 E1 z& C
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    " l- R2 j8 a; {6 k3 f
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    7 H3 y+ \- m0 k
  51. glVertex2i, GLint<0>, GLint<768>
      u* Q2 V6 {0 t1 ^
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>; I& g) c4 G, m0 d$ d
  53. glVertex2i, GLint<1024>, GLint<768>
    3 N- h$ q2 y8 _* Y
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>3 L+ Y" h2 u2 {) q  {% x
  55. glVertex2i, GLint<1024>, GLint<0>
    9 o0 s' ^) o3 B2 e$ w: P1 A* h
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>8 E9 u. X" N+ {
  57. glVertex2i, GLint<0>, GLint<0>; m' a0 i  u- L4 v/ V* x5 f
  58. glEnd+ K. g% H* W7 A
  59. glGetError
    ! [5 S5 o5 \) D/ W. L+ a) g5 R: t
  60. glEnable, GLenum<3553>7 d) `; U. h/ I, r
  61. glGetError
    1 W1 T0 L2 Y! S4 g1 x3 C
  62. glFlush: [4 r( X% H" X3 q& O6 ~
  63. wglSwapBuffers
    ( M5 @! x  d+ R5 c. @3 S& X- R( u5 W7 K
  64. ---------------------------
    9 @% ~0 f+ B4 {& A, k+ g& M
  65. , HDC<-33484711>7 Y5 v% |% q% M, A7 J9 U
  66. wglGetPixelFormat, HDC<-33484711>
    / {: O: v4 d- l
  67. glMatrixMode, GLenum<5889>
    " Z/ f, E. k* a& ~$ v& D
  68. glLoadIdentity
    / j! {- {, ?* u9 B; t
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    / W& g* k: Z3 k
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    4 {% l% n" Y- ^% |+ C9 w2 t
  71. glMatrixMode, GLenum<5888>+ F0 y0 F) g4 x" x
  72. glLoadIdentity" \  H3 f5 X; X+ z' B
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>5 Q: s: \* C7 q
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    * P2 T+ b! o8 S3 m8 c/ }* A) X
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    & B' L1 B- }- {+ t  S' S
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    9 R+ B7 `" J& q; ~% ~. }$ E
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    3 y% E" ~" S; B8 ^
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>* o8 F4 P& v0 o, D' e: s- W
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
      A, A$ P$ H1 ]6 x0 i3 }
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    1 q3 Z# f( f) O
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>4 k  L' t  e" p# D9 n' m7 ~; C  {
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    2 G. t' d! u. I) v
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    ; J9 ~! {! d' c) i0 J6 s+ i1 ?' i
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>4 r, N* G0 H/ F1 x+ F
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    0 x- M8 T0 r8 L, B6 S$ t
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    ( f  A8 O  v: A) F
  87. glClear, GLbitfield<256>
    8 i& e; o# ]  g- y& w0 Q  E& X) ~# q
  88. glShadeModel, GLenum<7424>$ J, q7 ^; z) g7 ]- ~
  89. glDisable, GLenum<2929>
    ( |5 u9 w* V0 Y. f- R* b5 D
  90. glDisable, GLenum<3008>
      F  X: e2 Y9 C0 j; T
  91. glDisable, GLenum<2896>
    1 r% j; s/ i1 t% {( T2 ~
  92. glEnable, GLenum<3042>
    9 y4 w9 r/ J5 O
  93. glDisable, GLenum<3553>
    8 j: q- B7 r. q( _' S
  94. glBindTexture, GLenum<3553>, GLuint<631>  x8 z  K. T) o5 Q
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>, Y0 z- g" B5 x: a- `( e7 T+ R6 `
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    # W' {; W9 V' R8 i! t& i* y
  97. glClear, GLbitfield<16384>
    4 x+ n" c2 k( j2 v) O6 u6 F
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    , Z) a, k+ w+ W( m+ k
  99. glEnable, GLenum<3553>
    % N: H0 K% \4 I1 W, Q  ^
  100. glBegin, GLenum<7>
    3 T& c" y: f7 ~3 k, L
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    8 @% ~! }2 o  [3 n# r3 }7 @
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>3 M% W: M6 U4 m
  103. glVertex2i, GLint<0>, GLint<768>$ w! ^& p2 b& j# v/ \
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>$ p0 r; }; ?! _' l  O( l0 j
  105. glVertex2i, GLint<1024>, GLint<768>
    ( u* P1 I8 @- j# @0 |  u' Q9 C/ E
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    . `+ {  i' M$ ?, L
  107. glVertex2i, GLint<1024>, GLint<-256>
    ( m  v) A% o, v, B* k9 K
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>6 x( Q2 U% j+ g2 i& ?
  109. glVertex2i, GLint<0>, GLint<-256>
    7 H9 Q' a1 |5 N  J+ F
复制代码

2 V0 f5 O4 C0 ^0 P3 \# S) q7 D: D( E- |. K! s: q
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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