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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑
0 [1 `! t# B2 \
" l2 s+ T* ]6 u0 }( K5 w! _本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
+ m6 Q6 [7 N/ z0 w) y游戏应该实际只用了其中1个,暂时作下记录。2 [% w0 {4 a5 C

1 ^" M9 _# z" b7 xDirectDraw是由bin目录下的ddraw2d.dll来完成的。" z( G; q+ L, Q6 U8 s) m8 l/ u
以下是一处的初始化代码
+ o" }& d' r, t7 {: `; Q" E+ o) B# I, U
  1. CSpace:10015015# g" H4 B  K* z0 G
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j( F7 Z0 o, e: r) C
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    7 F. n, r7 M5 E3 R7 [+ R$ a
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]$ |3 R( M$ J& X; r9 S
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    & N' d# }" e( R0 N
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    ( }6 u: [0 `' V  X- K
  7. CSpace:10015029                 test    edx, edx
    : f' N, U5 |$ }
  8. CSpace:1001502B                 jnz     short loc_1001503C
    / m4 k" j6 R1 ~! e8 k4 E
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]( d5 `- y2 F; s. d
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    5 [2 a+ @; Y, s
  11. CSpace:10015036                 add     ecx, 8
    . t$ n8 n( g3 m) Q% }. m( F3 j2 A
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    ) z0 I1 n# g6 \8 O' a* S
  13. CSpace:1001503C
    6 h, I6 u9 N2 Z4 K0 b. l* |
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j% M; z3 ^! V8 s3 e  s. _/ W
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    0 X$ d4 q; ]2 e0 y' T" `  k
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
      [9 a: T; L, c9 p+ g4 r" e/ _
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]) G4 c! R+ I# m( a9 ?  F8 {
  18. CSpace:10015048                 push    edx
    % p/ t4 M3 W, a9 C0 y3 c
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    6 K# c7 Y  J5 f3 l$ f+ `- h
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
      n* F6 H+ U2 Q1 d
  21. CSpace:10015052                 mov     edx, [ecx+20h]5 T% Y" h% k, ?6 U7 _8 B0 d3 s
  22. CSpace:10015055                 push    edx
    / B/ ~; a. O: q, I4 Y; T
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    9 U4 T% o0 g) [$ q0 O, ~
  24. CSpace:1001505B                 push    36 g$ A* A1 l3 a' y) Y7 \4 Q, |
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]+ D3 E; t& S  q9 G0 R
  26. CSpace:10015060                 push    eax* v& \. D2 z8 }4 H# r
  27. CSpace:10015061                 call    sub_1003882A
    & f8 t) N1 _8 _# f! K2 N$ l
  28. CSpace:10015066                 add     esp, 14h7 c$ B  j& V- e+ V1 X
  29. CSpace:10015069                 push    0               ; pUnkOuter0 W+ f# X' \0 i- q& Z6 [
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
      M5 V: @% u; @
  31. CSpace:1001506E                 add     eax, 1DCh- H* I6 o. h! P4 d/ ^+ B6 c. Y5 e
  32. CSpace:10015073                 push    eax             ; lplpDD; w: K8 \& I3 ]% O- _
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    $ y$ b, o# F  ]! E. a
  34. CSpace:10015077                 push    ecx             ; lpGUID$ g. U9 K5 {4 {5 q  }  T
  35. CSpace:10015078                 call    j_DirectDrawCreate
    ) E( Q% c% n( u# }3 h  P8 O6 c
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    - T5 U9 j* _8 D/ K/ ]
  37. CSpace:10015080                 cmp     [ebp+var_14], 0: X' q9 Z: \5 R$ m* m8 B0 U
  38. CSpace:10015084                 jz      short loc_1001509E% P/ f1 Q# D* a( A  @) A  u
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    1 e) X2 ~6 V, [& z  P. W& Z
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]" j. D: b- `) v0 K7 H
  41. CSpace:1001508E                 push    eax
    . _: D+ v1 B: {$ ?4 X$ k- W
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]3 g% b1 @8 l( _/ N
  43. CSpace:10015092                 call    sub_10038F3C
    - q& d. w# o. W3 M
  44. CSpace:10015097                 xor     al, al
    8 T5 n5 S8 O' w$ h
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

4 P  x  t' M, T3 w& F' M* H4 E( ^9 u

, X7 u$ p, [* a% j我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
$ m$ g/ U2 \) o0 }0 U记录到log_GL.out文件中。以下是摘录的一段。
, I  C( U+ f# B- h. _  K6 {% |8 H我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。( k6 G8 {) C% C  V
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
% s0 ^: u/ \" Q1 Y5 _; g$ J; m8 D
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    . U/ m0 l: X* Z5 v7 P
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    $ |+ y- T+ C& ]/ g5 _
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>% J. i- z$ d0 i6 s) |0 o
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>- m5 F. y1 W# W$ A+ I
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    9 @/ ]- f8 Q; y( p) F
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>! d' y' P! Y( ?& l
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>! q6 C! F+ V& u  ^: S
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>; n: o$ G" A& i( @1 S) x5 Q* e
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    & m8 l- I$ g$ F: C  Q% z, I
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>( S3 ~2 z; `: c% K( X3 {5 }
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>* s" @8 N! m; K! P& z
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>, m3 o( A8 J9 \1 i. `& N8 ~  N
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>6 c& c6 N# o! T. }; L. u8 D& z& l4 F
  14. glClear, GLbitfield<256>
    2 P- S" ^+ g9 d4 @( o, x4 [! c& D' u
  15. glShadeModel, GLenum<7424>2 [$ e1 Y7 [* C+ a' O3 Z' U1 }
  16. glDisable, GLenum<2929>1 i2 U( A) M% P1 C' K2 v1 f
  17. glDisable, GLenum<3008>/ R& s% ^& _' Q+ ~% D6 w3 v( Y9 ^) X
  18. glDisable, GLenum<2896>
    - Q# x9 n8 Y) }3 Q; X
  19. glEnable, GLenum<3042>8 v  M- `0 I; t! `4 a) Q: D
  20. glDisable, GLenum<3553>" z: t* {0 ~# ^& _: j- R4 D9 o
  21. glBindTexture, GLenum<3553>, GLuint<631>
    # r3 Z+ z6 F. p# n. ~7 W
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>- R" W: }6 N# a/ ?+ m& l
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    5 K1 c9 i9 Z6 A! Z" z. k( }8 e
  24. glClear, GLbitfield<16384>
    , M% x. g% b) h" V6 e! A1 K
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    , I: i4 s# d' y; U7 G
  26. glEnable, GLenum<3553>* |; ]4 M( K# p1 D* `5 k* [
  27. glBegin, GLenum<7>
    ' {% U/ X  s2 [$ R" F9 j+ E* u# ?) u
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    & f  w/ u9 @; y4 L! C* B7 g
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    % R! b3 U5 z( a- `
  30. glVertex2i, GLint<0>, GLint<768>! L, J/ ~- ]; ~7 r9 K
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>$ |  R' O% b( r3 f: E, r6 }% C
  32. glVertex2i, GLint<1024>, GLint<768>
    ; T0 u4 T2 \% ~
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>' V- f/ a4 e! o0 C* Y3 l5 P
  34. glVertex2i, GLint<1024>, GLint<-256>
    ) T/ N3 s; B2 d* \7 R' j3 Y$ t
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    $ [  K% f; v5 Q7 l
  36. glVertex2i, GLint<0>, GLint<-256>  h: ?/ ]  ~5 x
  37. glEnd
    ; D6 {$ B/ ?" r- z; J; T
  38. glShadeModel, GLenum<7424>
    : ?- X. ^; z6 a2 v2 n! s) \
  39. glGetError
    ! `% c3 [9 E, {* S
  40. glDisable, GLenum<2929>1 E5 c  |+ L, e6 q; p4 W
  41. glGetError, c+ A% t3 H' w$ z. D
  42. glBlendFunc, GLenum<770>, GLenum<771>
    - X4 h8 |: Q0 M5 ]! O8 E7 c
  43. glGetError  `3 @# S" D" V! `
  44. glEnable, GLenum<3042>$ {1 c2 R9 Y' K# b  j
  45. glGetError. H, E' j$ i! d7 ~  A: [5 [
  46. glDisable, GLenum<3553>. ^5 C9 E9 s1 t( l
  47. glGetError
    ) [: D- \: Z- K( N& W* {& ]% G
  48. glBegin, GLenum<7>
    1 v- c; t( C  I
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>5 @# m! @  D& }+ b" |
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    + }8 s2 E! C7 C9 \2 }5 B
  51. glVertex2i, GLint<0>, GLint<768>
    0 N# e  ?3 v" p+ x/ `
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>6 W6 y: o" d; F3 X
  53. glVertex2i, GLint<1024>, GLint<768>4 p$ ^: r( z, m  c
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>  d. T  V5 S; M
  55. glVertex2i, GLint<1024>, GLint<0>0 C- e# M" ]9 K$ k+ A
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>* w- _1 k* I; }9 d7 [" B, y; \
  57. glVertex2i, GLint<0>, GLint<0>* W! P' e. s* w3 f3 C
  58. glEnd
    9 P* J  B6 U5 Z2 A
  59. glGetError
    1 U$ e- H4 q% \. b* i6 U" k4 z  i
  60. glEnable, GLenum<3553>
    7 R& D! Q) A2 h
  61. glGetError" a: X+ l! k# l& i5 k
  62. glFlush  J9 W. Y+ u/ r2 B5 f5 e6 Z' r* F  h
  63. wglSwapBuffers) R1 ~6 U4 k2 l8 z
  64. ---------------------------
    , w* K3 v9 l! u
  65. , HDC<-33484711>
    7 `$ T4 _0 D$ f: X
  66. wglGetPixelFormat, HDC<-33484711>4 m8 p; B. o) C- l7 ~; j  \
  67. glMatrixMode, GLenum<5889>5 @, Y% _, k0 S3 h8 h
  68. glLoadIdentity2 ~) e$ E& W  C
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    ( n+ V3 e% P* N/ o3 L* G, T
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>& L2 B3 K4 @4 W7 a: x
  71. glMatrixMode, GLenum<5888>9 ~" ]$ Q5 {# p7 Q( ~
  72. glLoadIdentity5 M9 B7 E$ n) I8 b' E
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>" q7 ]0 R4 c8 i& }- ^9 r7 |" p* @
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    / s5 n4 w6 Q* ?- C' M, R
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    ( x! L" Z! C! d! R+ S& b, N8 c
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    - Q" V- S2 l  r9 C% i7 |5 ^# q
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    4 Y% Y' q! l! x- J/ Y1 z
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>% Z0 }5 F3 q- ~  X' G. \
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>) ]* @! S; D: o/ K
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    4 `5 O  V0 p4 J" h- }
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>5 b+ e$ @. T( ]; g8 ~. G; K
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    7 H" V5 i$ h% \3 G
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    ; T$ Y$ L0 |" ?; i! t
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    # V4 R9 k6 p/ Z: L
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    9 q; {+ I( F4 r" ]- f* D
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>" i5 h9 o- k% Z
  87. glClear, GLbitfield<256>
    0 [5 g6 |# V0 E
  88. glShadeModel, GLenum<7424>. A* f* e, d& r4 H  A5 o) b9 G) y
  89. glDisable, GLenum<2929>
    : I8 r% K: f  e) j, x
  90. glDisable, GLenum<3008>
    3 F5 J; r6 S/ S% k% W
  91. glDisable, GLenum<2896>$ o* l' K, r" p
  92. glEnable, GLenum<3042>
    / ~$ R7 l7 w! I1 r6 Y
  93. glDisable, GLenum<3553>* r; L: v6 q+ _! E
  94. glBindTexture, GLenum<3553>, GLuint<631>8 l  k, V  w$ v' u+ w* h
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    1 R- i. z1 N; t" U
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>" _! j. I- i: h. M5 m
  97. glClear, GLbitfield<16384>* H( G7 f7 v) t- p3 P' D! H8 y
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>7 C; e  |# b9 t! I0 k, }/ }
  99. glEnable, GLenum<3553>  O6 F* `9 r2 L" ?) C
  100. glBegin, GLenum<7>$ P8 z! g& f+ z7 N
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>; }4 @* h8 u) L0 u
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    & x  z  j3 b; c, A, O# o4 U
  103. glVertex2i, GLint<0>, GLint<768>
    , {! _9 t/ U: {/ u0 a  M
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    ; k  T8 d/ G2 p- L! h
  105. glVertex2i, GLint<1024>, GLint<768>
    1 h0 V2 F9 i3 R  U( Y6 p0 _
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ' }9 S8 ~& n$ W: `5 J7 U
  107. glVertex2i, GLint<1024>, GLint<-256>
    6 d, v! i) y# s1 P! B; D2 W% [
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    . D! G# R  N) X8 E2 c3 k
  109. glVertex2i, GLint<0>, GLint<-256>5 D7 A% |- m: L) p7 [  a7 t, ~% c; D
复制代码

) D: b* m0 a9 r- k1 `; b' ~
" |: B. K, `( S5 @( Y
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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