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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑
3 @5 F9 I: K6 F% Z' B
- p; n# g0 _& ~本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,. s* m% F1 [, o( `
游戏应该实际只用了其中1个,暂时作下记录。2 d  S1 p2 O$ l5 X8 f8 j, P' H
2 j# T9 c1 {* z
DirectDraw是由bin目录下的ddraw2d.dll来完成的。
. C6 K- ^; Z+ M$ i& n以下是一处的初始化代码
$ G! T/ M) c  A# G& L# G
  1. CSpace:10015015
    3 j( n: u) h& ^- e; _8 B- m
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j  D4 j# J& y, `
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0! A9 ~7 l0 m+ i+ L% q( M( n3 a! L* p
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    7 f0 F' V# `! Y5 o6 M- }
  5. CSpace:1001501F                 mov     ecx, [eax+230h]1 K/ N$ E* y) e# }' |3 @
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    ' H- X* ?. m$ ^* c. a4 _4 l2 \
  7. CSpace:10015029                 test    edx, edx
    6 N7 e  b8 d7 W+ D4 Y
  8. CSpace:1001502B                 jnz     short loc_1001503C
    8 k) h+ D+ s& m" j' C9 z
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]; Q7 X- K0 M( K6 o
  10. CSpace:10015030                 mov     ecx, [eax+230h]! R* |* q1 \; e/ Y  o$ u$ q- p' l
  11. CSpace:10015036                 add     ecx, 8. @! |  `$ p# {+ K9 J+ `2 O5 k) J
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx7 l! s9 H, L2 j4 B+ ~
  13. CSpace:1001503C+ C- \9 n$ ^5 T- @2 E
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j7 R2 v  t% e$ w5 E8 ~: m
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]- D$ y- O! l, Z$ Z
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    ; j1 f8 S( s: r! R9 f. O: d7 Y  m
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    : C7 c4 p% b, v! I
  18. CSpace:10015048                 push    edx5 d$ l8 ?4 K& f. |2 P; G" p/ T
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    , Z/ Q' @5 d/ k6 n7 L! X
  20. CSpace:1001504C                 mov     ecx, [eax+230h]; ~4 D! l* w, _: P
  21. CSpace:10015052                 mov     edx, [ecx+20h]- y/ Y' A) k" T* p% l' q
  22. CSpace:10015055                 push    edx. e1 }5 C% l' r2 n0 Y( y- k
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    ' \7 k6 W- j: j9 \; J/ j
  24. CSpace:1001505B                 push    3
    % V3 t! c- i, j2 _5 q, x( u" |
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    % M) _5 k: [- H" u  y" M2 q
  26. CSpace:10015060                 push    eax
    ; E3 h9 Y) t  b8 X
  27. CSpace:10015061                 call    sub_1003882A
    5 S  ?; H9 n( x/ Q: |  o
  28. CSpace:10015066                 add     esp, 14h
    ) ?  \- J+ g6 N
  29. CSpace:10015069                 push    0               ; pUnkOuter/ z6 N! l/ a/ H; a9 r2 a# K
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    % U* H1 ]5 B" C
  31. CSpace:1001506E                 add     eax, 1DCh7 }% d$ m7 {! k
  32. CSpace:10015073                 push    eax             ; lplpDD
    0 J& S# o" q  N  F; v
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]  k1 i# U# T0 R1 a! w  n* z( |
  34. CSpace:10015077                 push    ecx             ; lpGUID7 d& W4 x+ m) `) s! B! W
  35. CSpace:10015078                 call    j_DirectDrawCreate
    ! R5 |& l! P. _1 m8 a% R; N) F% T
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    ) v' z$ R- d# P& F! H1 P
  37. CSpace:10015080                 cmp     [ebp+var_14], 0, V9 F( g, h4 `5 G( g
  38. CSpace:10015084                 jz      short loc_1001509E4 B! {* Y1 w0 o2 H8 a9 K$ Q
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    : j3 I  g) B+ x/ r
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]( `$ U& Y' h6 _6 ^0 `- @
  41. CSpace:1001508E                 push    eax
      q; ~5 ]9 H$ n: z! ~  h% E& [
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]% b  m- p8 X. h
  43. CSpace:10015092                 call    sub_10038F3C
    4 z/ _" |4 r: f9 Z
  44. CSpace:10015097                 xor     al, al" }6 e0 x7 @& w- ]- R. M7 V
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
+ T" k" h2 }1 ~5 Q( T5 n( W* A
- H* ^4 t, X$ u6 p
- K/ U9 A3 i8 i
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.; @* b5 t7 K& S+ A. U
记录到log_GL.out文件中。以下是摘录的一段。9 S4 o- M, @; x+ K8 E
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。- R2 p$ X! p4 ]) ?4 c6 g
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?* c( c! {2 s! Y0 U$ ]
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ; C# z7 i5 e9 K# c9 e
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>, h5 _) O" l; a
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>* l' J6 }8 X5 O6 S' f
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    8 M, D6 F9 K1 C% O4 v, }* j
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>/ c) ?0 T, u1 N6 C% v& T0 @
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>- l& o( U- L% |+ |, j* i" e2 _+ G
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>) ]6 |8 F" Z" _* L8 w* H7 h
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>2 k2 I# V+ i6 Y* b- V' q
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>+ V5 F4 b, e( p. M
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    9 ~7 N& \. ?( M
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
      T' O" m6 {2 z, k8 c% R; S
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    2 d# ^* P" _7 p4 i. S" w
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    3 Q3 w! ]1 f2 A' {7 ^
  14. glClear, GLbitfield<256>
    8 m: _1 h, _3 B
  15. glShadeModel, GLenum<7424>
    6 H) I; M/ N6 T# N8 N
  16. glDisable, GLenum<2929>
    7 t! m0 q) n1 F+ ~8 Z% ~
  17. glDisable, GLenum<3008>
    : q5 ~0 o* U* t1 B9 Z. A
  18. glDisable, GLenum<2896>
    0 M) g. F, A+ f: K# P$ Z
  19. glEnable, GLenum<3042>
    ; k- I) p) d- P3 G/ J
  20. glDisable, GLenum<3553>
      k( P! s' x; Z, t4 y4 {
  21. glBindTexture, GLenum<3553>, GLuint<631>( K9 e+ d( F! T, q6 A3 u( D
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>3 r- |" o3 j1 p2 O3 @; j
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    & g1 N: @3 e  w: B8 n+ Y: J4 u
  24. glClear, GLbitfield<16384>4 `& T, ]' J* {/ l7 Q+ }$ O
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>- ^) n5 |. n+ f) ]( d) P
  26. glEnable, GLenum<3553>
    3 W  Y! b0 m+ `6 _9 J) V7 A5 C
  27. glBegin, GLenum<7>4 i: D1 Z! w( W
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
      Q& C" D- U" }6 Z2 j
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    ( c. r3 n# ]! E4 Z
  30. glVertex2i, GLint<0>, GLint<768>* ]5 [3 C, x3 a$ G4 t9 ~- B
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    # p; G  z6 r8 w. J
  32. glVertex2i, GLint<1024>, GLint<768>4 k4 y& E% U6 K- t2 o# k0 p
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>' o/ {. {; m* p$ [0 N2 V. |# y
  34. glVertex2i, GLint<1024>, GLint<-256>5 n! h9 J. B( o, p) N
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>4 @. G# X. g& n1 X  D
  36. glVertex2i, GLint<0>, GLint<-256># H7 b) g: A( G) H( {7 h# Y
  37. glEnd% l! T( X3 H: r4 x
  38. glShadeModel, GLenum<7424>4 a$ v. Z( P% R
  39. glGetError
    & w( I: L: N$ i2 Y" ^  m: @5 b
  40. glDisable, GLenum<2929>
    " B/ J# B) b1 u3 Y8 @
  41. glGetError& J' o7 g4 Z- j+ q: n
  42. glBlendFunc, GLenum<770>, GLenum<771>
    $ q3 w3 t6 G: f, S1 C5 x
  43. glGetError
    2 j7 u- P  u! a: D' i9 z
  44. glEnable, GLenum<3042>" E! M0 z, Z* I  [( X) j
  45. glGetError7 N( t7 j; J# H* g  p4 X& i8 a
  46. glDisable, GLenum<3553>* q8 d, q2 d. E7 e' z
  47. glGetError0 v. ^* o+ ]3 ]* d( C
  48. glBegin, GLenum<7>
    + s, N- a  [8 S/ J0 |$ R
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    : U) |+ @6 M8 K9 W
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>, q5 f% u- E4 [% }7 g
  51. glVertex2i, GLint<0>, GLint<768>4 [$ c+ W: ^1 S. H. O1 B* S" q6 b
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    ) U' @! I. Y  W2 u
  53. glVertex2i, GLint<1024>, GLint<768>. X/ i" `& E; k* S, [( C' n
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>/ v# A2 o; t, I2 d, [3 _/ E; L
  55. glVertex2i, GLint<1024>, GLint<0>) D- t( C. j6 e$ E" p+ f
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>4 s2 n! R: T  \& C" I
  57. glVertex2i, GLint<0>, GLint<0>
    : c( V6 t. Y# W% Q9 @7 K
  58. glEnd
    - Y/ }4 X! a% a7 i- H4 t! S
  59. glGetError
    0 o, Y- M. n- r# \# A
  60. glEnable, GLenum<3553>6 J! W8 Y7 e8 q
  61. glGetError; y9 s: b$ O5 r- r
  62. glFlush
    , u; `* U1 C) c' Y5 w9 M! d& S2 i( i
  63. wglSwapBuffers, B! v( Z3 h+ A" \2 p; G) `
  64. ---------------------------
    * P9 p+ F, P+ U+ f! `
  65. , HDC<-33484711>
    5 n' z; B4 C! Z, Z- }
  66. wglGetPixelFormat, HDC<-33484711>; M5 _+ n! q; H2 ~: Z. Q
  67. glMatrixMode, GLenum<5889>
    ' z  M% a$ ~( B0 L% N3 W% g0 \
  68. glLoadIdentity
    7 @0 k- u' F7 _, V1 g
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    1 E, {( T7 X0 N" D$ R
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>: e! ^0 M9 W3 P! R$ F+ w/ G" ^
  71. glMatrixMode, GLenum<5888>
    " \$ Z0 c3 c& ]6 f8 g
  72. glLoadIdentity& H6 Y  t: [# V5 m2 n4 [4 g8 w
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    . b% X/ V, X- k+ t; ~
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ' o# p% m/ V/ q) d4 g: {; Q, v5 _
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    6 t1 F" o9 T) c8 g5 z
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>  N$ B# f' k- _, w7 j
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>" d! J- k3 ~" h/ j. \0 Q# E  U
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>" B$ W; E$ A; j( p. b
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    ) T7 D9 [& H( k0 g/ A# d7 I+ w
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>9 F  ^2 T0 E1 ?- }
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>2 o* H( `7 K. R7 O5 R0 A3 j. ~
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>8 M( o/ m3 v9 A+ A; A5 b
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    - f3 {+ d) K3 w+ K2 v; }
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    * N. Y# s: b( F/ G
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>& [% X! Q  Z7 D( ]
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    % }; K7 v: P2 o9 s+ T
  87. glClear, GLbitfield<256>
    " R- P6 }5 Y) {4 _- \* U0 ?
  88. glShadeModel, GLenum<7424>
    : P, x( S/ j0 U4 Z3 l
  89. glDisable, GLenum<2929>8 I& R! ^' C! w* n8 w" N$ P
  90. glDisable, GLenum<3008>
    . j$ G5 K* R' l5 Q7 W  h
  91. glDisable, GLenum<2896>! j! M1 V# {. g; s# Q  T
  92. glEnable, GLenum<3042>6 a2 M, Y. N0 B7 O) H
  93. glDisable, GLenum<3553>) @0 ?7 [6 I2 W9 ~8 _1 G' ^
  94. glBindTexture, GLenum<3553>, GLuint<631>
    . S: r' z# s! X; K) }% J4 T& Q
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    0 z6 Y! R- R6 x0 c9 E' q
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ! \# P. G3 @: Q
  97. glClear, GLbitfield<16384>  t5 L& J- J7 l/ K
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    . C5 S; U" K* x  s2 U& Q' B
  99. glEnable, GLenum<3553>0 M0 y2 c) Y6 l! g2 L# [# ]
  100. glBegin, GLenum<7>
    ! e1 I+ Y+ ?7 k3 H) i3 g% M; f
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    * W1 T3 @. d. z, c
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    6 }/ [, |7 H" }5 S1 K
  103. glVertex2i, GLint<0>, GLint<768>
    1 j& Q0 P6 z& I* u: X
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    + S; Z; t$ O6 ^, J" }0 s
  105. glVertex2i, GLint<1024>, GLint<768>; H' s: l6 B6 V2 O8 L
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    + _) q0 v" z1 {6 ?( l
  107. glVertex2i, GLint<1024>, GLint<-256>' j/ e) d: C+ j" a& U* Q
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>  ]. \2 I. A0 X6 k$ C5 s
  109. glVertex2i, GLint<0>, GLint<-256>
    6 L/ p) r. d: D6 r
复制代码

2 A! r+ K2 T4 w" ~/ l" k2 f4 i) \
6 d( o- b- L* Q# {  y4 E
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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