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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 # K! |* f7 \/ s! E- {2 }

8 O1 R6 g. T5 w- s本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,: H, S! `+ d0 y0 _0 W
游戏应该实际只用了其中1个,暂时作下记录。# L9 e$ j8 b" I) W2 K8 t- E0 J' p

: [# w& P/ L+ }, V* G' a+ W* HDirectDraw是由bin目录下的ddraw2d.dll来完成的。2 y* y' r) n1 I( M) x( s" I
以下是一处的初始化代码
3 f9 G+ b, u) H
  1. CSpace:100150157 x7 f) P9 M3 p; N( M% E
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j; E1 W' r* H: i* t
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    * q! ~. R8 L+ C3 E5 A
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]) B6 D" B  {, ]3 K% \( ^
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    ) o2 B1 q1 z/ Y
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    0 p! {) M% S+ H" L1 [' K
  7. CSpace:10015029                 test    edx, edx
    / M: [, c' e" Z: I3 P
  8. CSpace:1001502B                 jnz     short loc_1001503C
    . U; ?9 ^2 H6 R1 J+ Z8 U
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    5 q+ L- i: Z4 l. Z! ^- h
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    & E4 b, S& M" G4 ~; \4 j
  11. CSpace:10015036                 add     ecx, 8
    ) {( q: Y+ ^3 j
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    5 d  F( F* v/ G: l
  13. CSpace:1001503C
    2 J5 Y2 S" C' a& m3 c- G7 P
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j6 m9 b" C! F/ r. ]* L
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]# Y. c: {* J7 f
  16. CSpace:1001503F                 mov     ecx, [eax+230h]/ V2 S5 e1 B, z* _  `8 k# p% I
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    4 C: B; Q9 B# G% k$ d& O
  18. CSpace:10015048                 push    edx
    ) }7 N) Y0 t2 x9 i1 \) D, ~' h9 }- L- R
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    7 o* t6 u& I& ]: X0 H2 z9 _
  20. CSpace:1001504C                 mov     ecx, [eax+230h]% K( _0 f" \5 \8 s  [
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    / G  m7 h; c/ Y5 t+ `: q3 f
  22. CSpace:10015055                 push    edx# _- g4 T$ W; i( H3 n5 N
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"3 \% E# z" Y4 b- p3 K/ _# w' Q
  24. CSpace:1001505B                 push    37 L+ O$ |: X# R; e; P# |  }5 N
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]8 w+ |8 ~1 F2 ?- e, ?* r
  26. CSpace:10015060                 push    eax
    : j' z/ d& ~' ?7 @- a$ Q
  27. CSpace:10015061                 call    sub_1003882A
    0 c1 H& O, d. ]* q" E
  28. CSpace:10015066                 add     esp, 14h
    . E8 e) N. B1 c0 p! e- o
  29. CSpace:10015069                 push    0               ; pUnkOuter
    # f8 `5 }1 |% B$ N% @
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    4 F4 r- D  t1 D
  31. CSpace:1001506E                 add     eax, 1DCh
    - O) R. W1 Y; W
  32. CSpace:10015073                 push    eax             ; lplpDD
    ; @5 G( M" q/ A% T
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]6 J1 |8 @' z2 a8 `& O1 T6 E$ c
  34. CSpace:10015077                 push    ecx             ; lpGUID" [2 [+ x0 q. T! G7 g& v
  35. CSpace:10015078                 call    j_DirectDrawCreate& c/ c4 C4 W( g4 K! T8 ?
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    # E6 @7 {* O! k) h
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    5 d* [/ Q7 O% ^. m
  38. CSpace:10015084                 jz      short loc_1001509E
    / s, o& S8 n- z2 S" C
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"3 J) j  z/ e7 }; n+ v8 M+ N0 u
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    . [0 W2 J/ e, c
  41. CSpace:1001508E                 push    eax
    : a9 Z  e4 g: l2 y: p5 S% x' f
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]- J& X! f* u, ?
  43. CSpace:10015092                 call    sub_10038F3C2 Y3 @; b% H0 G2 [! z5 L3 t" y
  44. CSpace:10015097                 xor     al, al, B; U% E" }$ s( F$ x1 d, p( E  p
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

3 _$ m4 m6 y; O2 q
+ [& }* U4 c6 d3 O0 p% s+ J2 A; `9 }. P; [+ c# a
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.% l) n6 h$ g2 j. `" h0 E, c
记录到log_GL.out文件中。以下是摘录的一段。, d9 O1 c1 a& d
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
* W. Z: ?% a, }1 j3 z以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?. X" U1 s4 R3 A0 A
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>9 m  K& N5 s% k' I) b  r) j0 [
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>3 d" I% W& g# R
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
      V) V; r7 t7 [& c# K
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    & Y% h$ u+ G  B* D( x3 `
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>8 X+ N, C% o" v2 p
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    ' U! K+ [# ]& g& g
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    1 v0 \8 M0 G) F
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ! ?) }! n# d0 H! w- ?$ Q3 g& `0 J6 t
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    ( N. H- P; i1 b
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>8 K' g0 o; p% D
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    1 G5 e4 s( O( g; K
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>+ o# s  H3 A5 B2 s% X* }
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    % V2 s3 ^- s; l
  14. glClear, GLbitfield<256>
    0 k' q0 g( J2 O9 l- E
  15. glShadeModel, GLenum<7424>
    $ V8 t3 Z) x7 o5 ~
  16. glDisable, GLenum<2929>
    4 p  u. z& D" U0 l, V9 e' o& }
  17. glDisable, GLenum<3008>3 v) [' V9 K, B1 U3 j9 G3 [
  18. glDisable, GLenum<2896>/ O1 ?# ?3 g# M
  19. glEnable, GLenum<3042>
    , L6 p( q* K" @) V! c
  20. glDisable, GLenum<3553>
    ( ~, b8 ?7 A1 P5 j& f2 T
  21. glBindTexture, GLenum<3553>, GLuint<631>, }4 Y$ w4 q* y& K% x" d
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    / N1 S; `& J" b$ z) T, e8 \
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ) U" }2 b* ?' z6 n0 U/ ]1 ]% J
  24. glClear, GLbitfield<16384>7 o0 h0 W' j/ R1 H: |
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    6 l' q4 V. k2 A- V! `% Z' o
  26. glEnable, GLenum<3553>
    " J2 t8 t6 n$ H6 ^* u
  27. glBegin, GLenum<7>
    ( {: R) z9 S& e' P0 d
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    5 R! }! O, q' S' ~9 y
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    5 W0 Z/ m, F: \* L6 T! h
  30. glVertex2i, GLint<0>, GLint<768>& h6 g# l" B5 R
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    3 o5 `& R/ d+ Y) J. d( x
  32. glVertex2i, GLint<1024>, GLint<768># ?- O9 S5 N! X7 Y% ?$ T, C+ m
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>1 t0 Y0 a% z* C# i1 R
  34. glVertex2i, GLint<1024>, GLint<-256>  a1 z4 s" v* k2 G8 `; Y
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    ! H: _' \; |7 B
  36. glVertex2i, GLint<0>, GLint<-256>, u" I+ G6 |3 a5 v! p
  37. glEnd. }1 }+ G# D1 j' h  ~5 g9 M
  38. glShadeModel, GLenum<7424>( u% P& v1 J+ _( T# ?% h$ J. o
  39. glGetError' ]1 z' x% N6 |+ ~% h, ?/ y0 k5 O
  40. glDisable, GLenum<2929>8 I- x& l; M; M; E2 t
  41. glGetError
    " `6 q8 H: b5 _$ s
  42. glBlendFunc, GLenum<770>, GLenum<771>
    1 \; j3 v& s( [3 X& r
  43. glGetError1 ~* e# F) r6 U4 m5 O3 G
  44. glEnable, GLenum<3042>
    5 v9 x  `3 d" Y, E- q
  45. glGetError
      l) f$ Z( [6 d3 S  `
  46. glDisable, GLenum<3553>
    ' u& ?) K3 G4 }9 I( C5 v) @
  47. glGetError% f  n" f4 S- o. S
  48. glBegin, GLenum<7>( u3 @% _% N# t) O2 F- Z
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>0 |9 Q7 P# j( \: e$ g9 Z
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>+ K, j3 r* f3 ~2 R
  51. glVertex2i, GLint<0>, GLint<768>! ^" ?0 C5 X4 k8 D# D& E
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>) S  e: E* V. O* x9 \# [) \: M
  53. glVertex2i, GLint<1024>, GLint<768>% w  G5 Y1 `2 @6 `) y4 J$ R8 Z5 Q
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    " E, j! F# @3 N1 Q
  55. glVertex2i, GLint<1024>, GLint<0>
    ! G* [/ V* x) T8 ]" N3 P$ I4 o
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    / }. ^# P* v* D" K( B# |, O, Z
  57. glVertex2i, GLint<0>, GLint<0>; S+ D* c# @8 m6 I0 U$ T
  58. glEnd! i% W8 _7 I( s2 q; m2 V
  59. glGetError
    8 G! B5 O. W5 b4 z+ L2 c
  60. glEnable, GLenum<3553>0 Q' |- P9 l3 Z+ y
  61. glGetError
    : _# Z+ x. i. d. V4 L7 L# d
  62. glFlush9 G. t# `! T- W5 n, k; G- x3 |6 y
  63. wglSwapBuffers7 L0 }% t2 h( B! r
  64. ---------------------------/ R/ y- t: s- p# F6 g
  65. , HDC<-33484711>+ H. g$ t" ~4 G  l
  66. wglGetPixelFormat, HDC<-33484711>
      b' P. s" I- t
  67. glMatrixMode, GLenum<5889>1 l) p0 c7 W: ^: |! P* I0 d7 A
  68. glLoadIdentity  T! s3 M: |5 `  R( T; J
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    . E9 y# X3 {! L% B/ }
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>+ Y* S4 ]+ ^. G% L5 a. d3 w6 r
  71. glMatrixMode, GLenum<5888>$ r0 M/ `& c8 `/ g/ x! w+ R3 ]
  72. glLoadIdentity
    0 p" W( h5 E) `, P: J) _
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>& W3 {- L* k' x' K
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>- v' i: s  v( g7 i
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890># r4 [/ v8 j% R+ [7 K
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    ' N+ L3 G" {1 ~) G' y, i
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>+ w1 [/ @0 D- J* d
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    0 j( q: h* b1 i& k7 R2 G( }& t( d8 B
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    ' [: j9 c# e& d& W
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    $ ?6 ?/ n9 Q/ p! Z: a
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>/ j  G; V3 h- a* A( O
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    8 Y( b1 e. R7 q6 L' a
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>" _- S6 d- v3 ~1 n
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>+ d' a+ p1 E% ~0 e8 n
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>  `7 i6 ^% b, l$ x) \% B
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    * }- i: ]* ~6 |; g. }8 `$ r
  87. glClear, GLbitfield<256>
    . s) R( X0 G" v/ u
  88. glShadeModel, GLenum<7424>$ o( Z( b1 t0 C0 S2 s
  89. glDisable, GLenum<2929>
    ) R/ Q  U3 |8 g: K- d* V% C: W: {9 ^
  90. glDisable, GLenum<3008>
    6 r3 n; F# r  ~$ ]+ w
  91. glDisable, GLenum<2896>" O# h5 L; o7 c  i
  92. glEnable, GLenum<3042>3 r. v! P2 w. n* X+ G( ?
  93. glDisable, GLenum<3553>
    6 A: J- d  ?# {
  94. glBindTexture, GLenum<3553>, GLuint<631>
    ) e. q: C' n+ E9 d
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    6 m+ I) ^( j+ @) U+ H$ l, s
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>1 r: w, F0 w5 e* O" C
  97. glClear, GLbitfield<16384>
    " C/ F- o9 @# @# t( `/ T- A
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608># Z, \( u& X$ A, i- h6 Z& Q6 R
  99. glEnable, GLenum<3553>, S) l. k- e) `2 u( h& M
  100. glBegin, GLenum<7>
    4 S' h7 c( M5 ^6 M, t
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, @3 n2 v2 z& [4 K8 v. O0 J
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    5 I3 t# H7 e' k$ B0 I
  103. glVertex2i, GLint<0>, GLint<768>
    * M0 j8 g& s, l# s" \3 s$ b
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>: B" H4 U# `5 F; R9 ?
  105. glVertex2i, GLint<1024>, GLint<768>
    / j. W% i( [4 `9 ?) K7 T. w" b* f# B
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>% d/ T% w8 I' h+ a
  107. glVertex2i, GLint<1024>, GLint<-256>8 g$ v9 s: u: }4 c3 w
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    7 M  E1 p  r# W6 A) o0 t4 s! m
  109. glVertex2i, GLint<0>, GLint<-256>, e7 N# R9 E) s8 d" a- Z" ~: w
复制代码

- b% H  T; W" M: ^7 G
5 s0 P! R- o: B, N8 S/ |2 v
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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