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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 ' r' l- x( S6 _9 |' X/ ?  m

; F5 `( [: v) L% @$ `' q! i, d本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
* w6 X! G2 X7 @# l2 {游戏应该实际只用了其中1个,暂时作下记录。
- Y& e5 g, E  n0 I. X- ^, Y% Z2 a% T( O8 r" s# R: S3 Y( T6 |
DirectDraw是由bin目录下的ddraw2d.dll来完成的。. m) B# i; G0 W$ I6 x4 b
以下是一处的初始化代码8 G: S9 L/ u. X; u
  1. CSpace:10015015% T8 {' ]% a1 F. z, E+ f
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j/ Q+ M; c$ H# Q4 J9 m5 i
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    5 N; E  \7 l" u/ c$ Z* l, L, `( g
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    . k" f# `) n6 ?+ e5 |
  5. CSpace:1001501F                 mov     ecx, [eax+230h]9 p( `' k5 s! Z( {' a' W, ~
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]4 m  t, O  ~" a: U* C; d2 R
  7. CSpace:10015029                 test    edx, edx5 Q7 S1 Q, H" P+ m. O
  8. CSpace:1001502B                 jnz     short loc_1001503C: f! B& W1 y8 r, ~
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    & R) ^$ i6 E! i4 i
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    6 g8 C8 o; k. P6 y3 W2 p/ F6 h
  11. CSpace:10015036                 add     ecx, 8
      }, h( `. S/ x/ t2 K) L! Q
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    7 r( R1 S" _- d% S/ Y
  13. CSpace:1001503C5 x- `) R" h* D  w2 u
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    * t# q+ B$ {5 ?, ^" l
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    + v) f2 ]  K/ w; L; {/ }4 t
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    : Z, Z$ @% i8 |/ V* Y
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]/ x( V3 ]& d5 r6 s) G% T$ N$ M) z! p
  18. CSpace:10015048                 push    edx0 D, }9 H5 B/ N9 O% X: |) j8 o1 w# ?
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]- ]" c0 @: l- m2 Q- j( I
  20. CSpace:1001504C                 mov     ecx, [eax+230h]" }7 P: o; j5 n' @# e
  21. CSpace:10015052                 mov     edx, [ecx+20h]2 u* D0 @* {: {9 I# d! W
  22. CSpace:10015055                 push    edx, q! `0 _8 A9 z7 l4 F3 Q
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)": K2 b# e1 L; m4 S& w
  24. CSpace:1001505B                 push    3
    - s! a$ p$ L9 h, }& J
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]3 d6 B2 N7 l& i  H
  26. CSpace:10015060                 push    eax
    $ S" `( j7 T: G  g
  27. CSpace:10015061                 call    sub_1003882A
    * _: l$ K: K# d0 g/ c4 L) M
  28. CSpace:10015066                 add     esp, 14h, K8 g* \* U+ `8 E  q, U/ [1 s9 U
  29. CSpace:10015069                 push    0               ; pUnkOuter
    : Z- ~, w+ M4 {1 I9 y
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]1 ?6 \4 V" u) u- i0 N& Y
  31. CSpace:1001506E                 add     eax, 1DCh! @0 o; q" K# t; e
  32. CSpace:10015073                 push    eax             ; lplpDD: b% X2 k6 O, X; L, z: p* a. J
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]  c: c; B  R) H/ g% z+ K' O
  34. CSpace:10015077                 push    ecx             ; lpGUID
    4 @5 Z8 Z2 g7 C. K1 ~5 i
  35. CSpace:10015078                 call    j_DirectDrawCreate$ F: M' e0 _, I) `6 t
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    + D* s$ Z8 v7 M" _$ S/ K  a8 |
  37. CSpace:10015080                 cmp     [ebp+var_14], 0$ T1 q) F2 b7 @, E" }
  38. CSpace:10015084                 jz      short loc_1001509E0 D' n0 _$ X  s" J4 K8 o5 m
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"; Q( u$ I4 q4 D
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]6 |1 _% W: T2 j% m) A' C5 Q
  41. CSpace:1001508E                 push    eax9 U4 w  u( T) k0 k: {
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    : a) `/ `5 n, P4 v. c+ n% E
  43. CSpace:10015092                 call    sub_10038F3C& t3 L* P  i/ w2 @  p: j
  44. CSpace:10015097                 xor     al, al
    8 Y! \7 ?) s) \
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

5 M2 a" u, d2 ~1 Y& y3 a5 q, l
7 \. |8 I" [3 ?# V0 }8 |
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.- _: g2 x9 F, I1 E( t: C
记录到log_GL.out文件中。以下是摘录的一段。
- w9 |9 E1 A8 L1 I* Q我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。( r2 k! r( p# }- v5 H7 L9 R# b2 o+ q
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
) U# E& |) Q7 m
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>" w3 N; i, Z  j# T
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>8 w, g4 C% V  ^. t- J% F$ e' W. R: ?
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>- H, M, d7 ~4 r/ o3 B: h
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    * w5 E' {/ v% d. s% n- Z4 g6 p
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    4 u+ [0 }6 X( z
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    2 Z8 U0 W& K0 T
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    " T7 H3 h# ?- a9 u$ r! q9 J
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>! X" o/ ?( y/ \0 S* [: @
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    9 O( [* `& r9 W
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    " ~# m* ~' S1 a; M0 Z
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    3 H( E/ x6 o9 {/ V: F
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    / S' M& H3 S( i% ?& O1 E" b6 M
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    . [% c9 |! W& p; j  t
  14. glClear, GLbitfield<256>7 o: M0 t6 F- D2 n3 z, ]2 b
  15. glShadeModel, GLenum<7424>3 K3 ?$ V) d. I' S7 M
  16. glDisable, GLenum<2929>
    % k. k* }. c& S6 v
  17. glDisable, GLenum<3008>
    / g5 P" [6 ^2 \4 r
  18. glDisable, GLenum<2896>
    / o2 g+ ^; u7 {
  19. glEnable, GLenum<3042>% i3 z" F& J2 [4 l% z; t0 x+ Z
  20. glDisable, GLenum<3553>
    - G7 g- M* J1 m* j
  21. glBindTexture, GLenum<3553>, GLuint<631>
    $ O  y' s4 W& N: Z
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>& F6 s, ?- @5 C" Z0 K4 e, F
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    / h: U( Y- y+ l' O5 E
  24. glClear, GLbitfield<16384>
    . ~" R" C, g( r3 D; ~& p' H
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    * L' a2 U5 @& l, n
  26. glEnable, GLenum<3553>
    7 [5 Z# u, L, y1 H  s
  27. glBegin, GLenum<7>
    / U$ Y) p4 p9 }+ S- F9 Q
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    5 b& E# S9 @0 @; @0 Q) I6 v/ S& `
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>  ~1 D# J0 r' r5 w1 S
  30. glVertex2i, GLint<0>, GLint<768>1 e2 l" T" V# z1 Y
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>+ O6 w  D. n) G, x, L3 y7 `
  32. glVertex2i, GLint<1024>, GLint<768>
    9 k. g  r( U- r8 s5 v. y+ u
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    + [' ?, p. O9 A* F
  34. glVertex2i, GLint<1024>, GLint<-256>
    ( R7 A5 i6 J& f# b. u$ L
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>+ A$ @- G% i0 O- B, m
  36. glVertex2i, GLint<0>, GLint<-256>
    6 b, t" {* \3 ?( p
  37. glEnd
    7 d7 |# Q5 A6 \! s
  38. glShadeModel, GLenum<7424>
    " Z" U# T' G" @. F$ U. F! N
  39. glGetError
      G9 G3 v: m6 F. _  A3 o9 M8 z
  40. glDisable, GLenum<2929>& v) S2 m! n# R* V! A& K
  41. glGetError
    4 r, S+ j; C" H; q
  42. glBlendFunc, GLenum<770>, GLenum<771>
    6 Y- f5 i# j% o0 Q+ V
  43. glGetError
    4 a% _( I% \# k- k1 A6 M
  44. glEnable, GLenum<3042>/ E" z6 l! Z! g
  45. glGetError& @3 E/ z- t0 c9 H
  46. glDisable, GLenum<3553>+ r) d6 T& g. C# I
  47. glGetError
    5 n7 j5 |& m1 e% _* a
  48. glBegin, GLenum<7>
    . E% `0 _0 s: P: z' n# ^0 B: A3 p% h
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
      }' r9 Z& I1 }0 s# }! ]  h$ W6 O- h
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    " y2 M: y4 Q$ r
  51. glVertex2i, GLint<0>, GLint<768>
    . X0 ]) L5 [- L0 v; q2 Z5 P
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    " J* n6 Z0 U' K; y% O
  53. glVertex2i, GLint<1024>, GLint<768>
    # M4 c' e! c, b# [6 q# G
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>4 h* n0 V% p' k! i6 j& s9 i
  55. glVertex2i, GLint<1024>, GLint<0>
    4 R* ^: O* A. ?
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>& J5 Q( P, H4 c7 Q1 D
  57. glVertex2i, GLint<0>, GLint<0>/ c  n% W' T4 b& d
  58. glEnd  f0 j" @" \4 U5 i  [" g" ~
  59. glGetError
    # \! }6 G# g' _) v
  60. glEnable, GLenum<3553>
    2 i) B2 `) m1 u3 Z0 ]
  61. glGetError
    : Q3 ^! V0 {* s5 Y& P* l1 q
  62. glFlush
    + X  `$ J9 V* @0 F
  63. wglSwapBuffers
    ( ], g' h# ^+ h( o4 R/ J/ s
  64. ---------------------------
    . r. [% A# G9 s5 R2 g/ l. ]
  65. , HDC<-33484711>4 g8 N% |3 R! C  G% K! Y
  66. wglGetPixelFormat, HDC<-33484711>% ?) [7 t" o! R/ z+ F$ p
  67. glMatrixMode, GLenum<5889>
    - T' V) r1 b! z7 G2 n
  68. glLoadIdentity; A0 r9 q% \8 T; h  e3 i% A
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>% w* F/ g, v+ g3 q: {
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    - A+ ?: [- O9 q8 B( N5 @
  71. glMatrixMode, GLenum<5888>, S0 u8 m* J' z+ ^) s$ T
  72. glLoadIdentity
    + h) k# R7 _0 [, }$ \
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0># [, x6 b0 T# l( f% H
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
      Q% o: Z2 R% x& j5 \, e
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>' x3 k, Z% G8 F9 x+ F
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768># R/ q: o# o1 g3 Y+ Q
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>- a* K6 A9 l3 F- Y6 e  i) @1 {
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>+ j; ]" ~' n: t4 o
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    9 j4 M# P! H) c1 B& x1 x! n: ^
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    ! L3 ~, }. T# a, o+ N" H
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    . E6 U+ p. T) s1 U% O
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>2 }! P) J0 \/ W3 l; x6 ?1 {
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>% s) p) k% D8 i$ T) z7 ]
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>* d( Z" l! N/ a. u
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>- i. Z, r$ A7 f7 P# Y
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    ' B; \: [0 |/ v( R) y
  87. glClear, GLbitfield<256>
    7 W# }9 D: T/ N; y, C
  88. glShadeModel, GLenum<7424>
    5 ]+ ]8 E- [' B& I6 }0 S$ u
  89. glDisable, GLenum<2929>" c7 x% d% [& x# f; P; w
  90. glDisable, GLenum<3008>1 t# G( N& X# ]
  91. glDisable, GLenum<2896>4 E: e& b7 l& ^9 m1 D& b* A
  92. glEnable, GLenum<3042>- Z9 D% q- i8 n) V
  93. glDisable, GLenum<3553>
    & ^. X* z% v- z3 ^9 I* P
  94. glBindTexture, GLenum<3553>, GLuint<631># b: U( `( U; u* D! ?& r0 s
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>3 @2 w1 Q  u' \8 P# J& b
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>6 h& \/ i) z2 y" g6 E
  97. glClear, GLbitfield<16384>3 [( G, p; ?: }8 b9 J2 I' f* O" w4 g
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    2 l; q8 x4 @1 p3 Y
  99. glEnable, GLenum<3553>
    : [  ]5 c$ |( `
  100. glBegin, GLenum<7>
    9 I! p/ t1 Y4 b$ j' B
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    3 K6 i8 H4 A# R4 j
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>/ e3 u7 ~. A! e  S7 f
  103. glVertex2i, GLint<0>, GLint<768>0 @- D" L6 m8 D; M& y  _
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>2 B+ {' D. b; S- |7 h6 a
  105. glVertex2i, GLint<1024>, GLint<768>
    9 D& T8 v! F2 R/ L2 y
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    $ l$ M+ q. P$ I4 X0 l. {
  107. glVertex2i, GLint<1024>, GLint<-256>  j/ z" ~, U. L' G" Z! A# L. x
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    & J! ]- [0 e5 l9 N7 j/ T- z3 Q8 ^
  109. glVertex2i, GLint<0>, GLint<-256>* O6 |' Z7 W$ r$ ]- `* T
复制代码
3 z; k+ g' i9 B0 x* M* t- J- h) M- L

" c: j+ w$ Z( P5 }; m# u  O
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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