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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑
- A& t. Y1 S& x6 N
" i0 d' Q9 \( k0 n6 g8 X) Q* `) x本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
* V! Q% n  M0 [$ y) m* l& s游戏应该实际只用了其中1个,暂时作下记录。
/ V' }' Y- l+ z
! F7 v% K) d& ~( {+ \DirectDraw是由bin目录下的ddraw2d.dll来完成的。- H8 m7 {% K& s
以下是一处的初始化代码0 T8 e/ Q8 a, p2 N; Z& u
  1. CSpace:10015015
    ' i5 d* F- W* o5 s- k& Q( M6 @: ]$ a
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j0 ^) b) A4 c9 \/ j9 B
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0; T' A) R& b) N5 F/ \
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    2 @$ C6 J: y1 U3 Q/ Z$ `
  5. CSpace:1001501F                 mov     ecx, [eax+230h]" P! G7 a# P, v" t" H) z
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    $ a! l3 L0 u$ g: q
  7. CSpace:10015029                 test    edx, edx7 r' m0 b8 ]1 u  q! _5 m
  8. CSpace:1001502B                 jnz     short loc_1001503C0 y0 _3 J2 U9 H) ?- n+ h# Y4 E6 R
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    5 ]% }7 ?" g' D
  10. CSpace:10015030                 mov     ecx, [eax+230h]4 M9 \1 B. g: V9 @  ~/ P+ e
  11. CSpace:10015036                 add     ecx, 8+ M3 t& T( t' ~  w3 q
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx. z) \" P" O' ~
  13. CSpace:1001503C9 H) D3 k% N+ R# a/ x0 H+ \7 G
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j' E. Z" I2 E; Q
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]: ?, B( m8 U8 _- j  k( P
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    ' M: j7 B; F% Q
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]7 i7 v3 l& M# V2 }  y4 {9 b
  18. CSpace:10015048                 push    edx
    ( o( o7 V9 e5 z5 M' y' k5 b
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
      ]5 n$ ]/ ^5 w% E' g* K6 |
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    " l( C, P5 a7 C3 Y3 w& X. z$ Z! O* A
  21. CSpace:10015052                 mov     edx, [ecx+20h], T( E1 M: d% l' F6 u: n* a
  22. CSpace:10015055                 push    edx1 S; w4 |9 ]# y
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    4 y9 u* X$ T' ?
  24. CSpace:1001505B                 push    3
      l2 V1 ]- U4 O) @8 g! b" z
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    # T5 [9 F  R  f( w
  26. CSpace:10015060                 push    eax. P+ U* m( o) K* c. v
  27. CSpace:10015061                 call    sub_1003882A. C: n4 N. @' q0 j3 R% K1 t9 k$ t! ^
  28. CSpace:10015066                 add     esp, 14h& K! |! h% v. E/ P4 t
  29. CSpace:10015069                 push    0               ; pUnkOuter
    3 O8 b# m$ R& q  J4 d) t
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]% z+ a8 z! A3 s5 _4 d( }' G
  31. CSpace:1001506E                 add     eax, 1DCh
    ' B0 q0 |* b" _/ C
  32. CSpace:10015073                 push    eax             ; lplpDD
    : K  I0 U( S1 X8 [
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    ! w2 b  t! l. K- p2 t4 B
  34. CSpace:10015077                 push    ecx             ; lpGUID5 h% e+ n) M0 Y# q: M) P
  35. CSpace:10015078                 call    j_DirectDrawCreate. w/ I: i: n# l' }3 Q* \
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    ! f7 Q6 w: }5 @5 R' B+ ~
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    1 {6 k# G$ r4 L7 h
  38. CSpace:10015084                 jz      short loc_1001509E
    0 s2 c& V% ?$ I4 M$ W# L
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    % i8 [: {: j$ z- X
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    ! A0 N$ k3 P5 w
  41. CSpace:1001508E                 push    eax0 W( Z1 \+ ^. I! K6 X. i$ G2 T& E' l' J
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    ) B, ?+ o5 L. v7 U
  43. CSpace:10015092                 call    sub_10038F3C: j. G! ^- g& X- G
  44. CSpace:10015097                 xor     al, al: b, I/ F9 v, c* O" j1 a8 O
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

7 o# H' M9 z5 {% S- p5 R% |* b3 I/ V' L" e4 h

) T+ e% ?9 K  R4 n我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
0 }0 q+ ]; D, D) E  `3 a记录到log_GL.out文件中。以下是摘录的一段。
: V8 ?4 W# R, N0 l/ G我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。; j$ m6 [" P+ k* g! Y* A. F
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?0 Y% _3 ]  d1 p. A4 e
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    5 m$ b& u% f0 j6 U, T3 `, `5 E
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>* Q7 Q# x( [( ~
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>% Y2 I9 B# \# |( D/ }6 M
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>& P( r4 Z! [5 ?* F) c& I2 q/ B
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    1 k& c- f8 |/ u. y% k  j" ]
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    % C* A& X. c' {) y! j
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    4 S3 X3 l5 q) G, F3 `
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>* y! O7 D; b/ h
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
      `: `* ?9 m4 e. \) Q9 f; d
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    : d& c7 u5 R2 W/ Q; M3 L, v
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>9 v+ z6 m# u7 {
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
      J) e5 F% O0 j* k  j- d
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>$ v- D% I/ J# w5 k, Q4 n+ \# w
  14. glClear, GLbitfield<256>  p3 w0 ?( A) W" ]' D  s
  15. glShadeModel, GLenum<7424>
      N4 I, R) m% {: h" p- ]* _
  16. glDisable, GLenum<2929>
    , ^$ o& a. X  k) I1 V
  17. glDisable, GLenum<3008>
    / R( O/ S* n7 @4 f. c5 X
  18. glDisable, GLenum<2896>& u. T2 Y1 n! g4 P2 {  D. f" T' P
  19. glEnable, GLenum<3042>$ A3 V3 k: {. p7 [7 q2 b- W4 Z
  20. glDisable, GLenum<3553>
    4 s/ D1 N. r3 L! z$ m
  21. glBindTexture, GLenum<3553>, GLuint<631>0 H& N+ X" j3 w  n. E: T
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    $ t. e+ G; O( I# F, ?
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    + i' L( w' e) K3 ^8 [" C4 T1 f
  24. glClear, GLbitfield<16384>3 o  ?: g7 @& Q  i; E5 j$ {7 \) B) ~# P
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    7 `% T' q  O# F# }5 K
  26. glEnable, GLenum<3553>
    1 G- A. W, _& X  B) ?
  27. glBegin, GLenum<7>
    ! U- k# W# f. X
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>- U  G0 g. g0 V- O
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    / ?/ f+ d5 f6 p3 i
  30. glVertex2i, GLint<0>, GLint<768>
    1 I' B# z3 t' y
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>9 o. @8 [; b5 [4 M3 m6 X
  32. glVertex2i, GLint<1024>, GLint<768>
    " H# S  M/ J/ A0 I& w+ q0 m
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>$ v: t+ d1 d; I4 E
  34. glVertex2i, GLint<1024>, GLint<-256>, s# p- T0 ?1 R3 Q
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>  q% W$ T8 w4 ~' c2 m; C# [
  36. glVertex2i, GLint<0>, GLint<-256>
    ; f- Q! s- M$ Z! S# `4 [
  37. glEnd
    " n+ t) ~9 a% \9 _
  38. glShadeModel, GLenum<7424>6 ^  G9 _  K0 R: h3 F
  39. glGetError
    # j5 K  X% V: [5 T* o* k+ M3 M7 x" P
  40. glDisable, GLenum<2929>2 w  o- Q/ N1 W6 m) g/ Y$ e" n( a1 A
  41. glGetError6 m. M+ S, r& Y  V! e: t9 w
  42. glBlendFunc, GLenum<770>, GLenum<771>8 W: U2 f) l( T9 p$ R0 E5 W) C
  43. glGetError
    * r* ]6 Z% E8 m3 m- J& B4 C
  44. glEnable, GLenum<3042>
    8 I0 t+ M5 Q; G5 ^8 S4 h! ]3 U/ R
  45. glGetError) Y; M4 c: z8 m5 |# j* P2 B
  46. glDisable, GLenum<3553>  y. L5 e* k# g# ^7 F4 }2 i- [* S
  47. glGetError
    1 z. Q; J' o5 D- v
  48. glBegin, GLenum<7>, |/ n6 L( u% X0 h+ I* k4 I
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    - `5 e8 y7 T4 w# ~5 {7 t
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    & F9 r' i$ ^& _6 a1 w; w
  51. glVertex2i, GLint<0>, GLint<768>/ b7 j& N4 J. z4 s. L( @
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>0 @8 \: d. a% U6 Y
  53. glVertex2i, GLint<1024>, GLint<768>4 D* ]0 C8 J5 s4 B' n
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    3 d  ^1 g% P% _& f" ?
  55. glVertex2i, GLint<1024>, GLint<0>4 r) q. |0 Z* P" p6 G
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>+ X4 {5 r/ I" S  ]4 b, _* m: r
  57. glVertex2i, GLint<0>, GLint<0>8 s  ]" L3 _& J# m& t" J
  58. glEnd
    " q3 I2 ~( |; e" z1 \3 `
  59. glGetError
      @$ _  {' \+ e/ j! C
  60. glEnable, GLenum<3553>
    & g4 I: p  W2 T5 j7 N; N2 ~. ?
  61. glGetError
    7 D' U, _! S1 v2 e: X' U" R- o8 \
  62. glFlush
    ! A. i; M7 J- `  {2 q
  63. wglSwapBuffers' l7 U( _; P: U& Q* {! u
  64. ---------------------------
    # y' ?1 @: ~* m* Q! w9 G
  65. , HDC<-33484711># O* |$ _# K; M# `& C+ q5 [5 y! X
  66. wglGetPixelFormat, HDC<-33484711>
    * E* Q# p( y' y1 q
  67. glMatrixMode, GLenum<5889># r: r! N# q9 r$ ~! K! L# O
  68. glLoadIdentity' I1 M( ]/ a6 K9 e3 U* }
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>3 R! S& P5 [: V8 Z
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>' W' q" T* u: v0 B8 C) e" p
  71. glMatrixMode, GLenum<5888>9 d1 k& a! U& U9 @: M6 k$ i9 c
  72. glLoadIdentity% Z- p2 k& A" P4 s% Y6 B
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>6 i4 m% @1 g9 ?! K) }" L- |* \! Y7 y% {
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>! p5 m. c( Q8 O- Z
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>( {& E) f6 U7 B  X8 ]4 g% u
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>$ u. w8 [; T9 O' Y
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>+ `6 z! h! }# A; \/ E3 b' _
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    4 |- b: _% t! R9 A2 T
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    : O! J) d5 S! ?( Z+ e! s& J5 s- x
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>0 |& @- `. i; \, z( V( H
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>7 E4 Q% }5 U: r8 _4 r. k
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    . O. ^6 c0 |6 Z6 `- }. {1 ?% ?
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>7 M/ e4 r! Z- B6 ^
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    * b( [, U+ n( p
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    * ]  }5 P( a& p$ e7 g- N; ?
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    ' G2 L: q; a* _) e: f: n% ~/ J
  87. glClear, GLbitfield<256>9 _# y! ~1 ^+ |+ c% F% _2 |
  88. glShadeModel, GLenum<7424>
    5 ?" d. k# Z: j1 t. x
  89. glDisable, GLenum<2929>
    7 \' k' _; `3 m8 E- M, g
  90. glDisable, GLenum<3008>
    , q4 q8 c/ a( `2 h
  91. glDisable, GLenum<2896>" H- ^% O6 b' k% c+ G  Y+ {  F; o
  92. glEnable, GLenum<3042>
    $ @/ x& O0 D; L9 ?) h* b
  93. glDisable, GLenum<3553>6 ^( A, K) M% x* E( W* A' g
  94. glBindTexture, GLenum<3553>, GLuint<631>
    ( T5 k) A/ o# S
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    2 B* b( `2 J* o) E
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    $ i8 z! L3 v! c
  97. glClear, GLbitfield<16384>, ?3 ~: w" o/ Q1 U) {! S
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>( Q7 H" ?% P2 c1 D
  99. glEnable, GLenum<3553>
    8 [7 N2 W6 P  A
  100. glBegin, GLenum<7>  d& J5 F) z  L% }9 D" T! _
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    % E! M: C8 C; U- Y' Y% D
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>* G% i+ s/ ]6 X* n8 \: g5 r
  103. glVertex2i, GLint<0>, GLint<768>
    0 x- u  B* s  m; I. Q
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    6 P4 A' e. L7 q8 R" C% b
  105. glVertex2i, GLint<1024>, GLint<768>% E5 E& D8 Q) b$ @: U4 s
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>) Z) ]. k+ U/ K  S/ C1 I
  107. glVertex2i, GLint<1024>, GLint<-256>
    # I1 p: \% \( \# D& [
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>! t3 c2 O+ O! [- }9 y5 f. u8 A
  109. glVertex2i, GLint<0>, GLint<-256>; `4 R* [2 b" M, d6 L* l
复制代码
" d( Y6 Z  O6 f" R
1 m1 G" d; V: b4 Q, j
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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