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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 0 `/ O/ C) `$ S$ ?

& U* g3 C' S& X) G) ?, c# k本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,( v$ b/ i% a3 l) q7 U
游戏应该实际只用了其中1个,暂时作下记录。! o% S. E) `9 x

- ~& ]; H& O& Y; uDirectDraw是由bin目录下的ddraw2d.dll来完成的。
6 B1 t8 s; K+ M% l$ L以下是一处的初始化代码$ O% J1 c" W$ B: B8 s3 d
  1. CSpace:10015015/ e# o5 o3 O8 P( }1 v/ e
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j/ {* Q7 V9 e$ u7 v8 O9 x
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0% T4 S/ s: @" S* }* y" ~! N
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    + ^3 Z  O- Z: A
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
      h1 i- I3 K1 {2 l4 ?1 k7 ?
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]. a+ {3 q) d, n( V$ ~$ q
  7. CSpace:10015029                 test    edx, edx
    6 l3 u/ e! k1 j, X% U
  8. CSpace:1001502B                 jnz     short loc_1001503C
    5 F1 v$ D4 h5 j2 t
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    $ P; y/ s) f, m+ Q( o% u+ G
  10. CSpace:10015030                 mov     ecx, [eax+230h]. P3 O4 _* @+ Y6 a
  11. CSpace:10015036                 add     ecx, 8
    * l: D5 ?/ F" s2 Q8 H; u% F9 P. r
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx) @1 b" U3 S1 @% B- s" N
  13. CSpace:1001503C6 k. `8 M# d: y3 S/ d. K: B  B% B
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    7 g' t5 L+ l5 t, K# p& I1 F
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]- I% R. W1 W+ {4 C: G8 s
  16. CSpace:1001503F                 mov     ecx, [eax+230h]" i; [$ U9 C6 u1 K3 C, L
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    0 v( w. {. q2 c  B0 d
  18. CSpace:10015048                 push    edx! Y3 W% k; n3 C. U. Z8 z
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]: o% f1 V" O( q: }: x
  20. CSpace:1001504C                 mov     ecx, [eax+230h]) S# a- U4 G( g5 I5 H' X
  21. CSpace:10015052                 mov     edx, [ecx+20h]$ T2 E. y/ s5 v3 l9 {* _0 C
  22. CSpace:10015055                 push    edx9 M* j% B- P9 ?8 c
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    - j$ j9 L0 Q# d5 o+ ]; }/ B1 W
  24. CSpace:1001505B                 push    3- o6 R' ?0 E& [3 G6 I- c
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]- L" f0 e5 I1 {3 [: O
  26. CSpace:10015060                 push    eax
    % ?4 f. {5 g; L7 N0 Y4 `
  27. CSpace:10015061                 call    sub_1003882A% F) n$ ?. W, G3 m4 f. S) Y9 E, W
  28. CSpace:10015066                 add     esp, 14h) ^1 w$ L1 p$ W2 H: l
  29. CSpace:10015069                 push    0               ; pUnkOuter# f8 _( E9 d: ]. E
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]: i! Q" [; D4 K! u
  31. CSpace:1001506E                 add     eax, 1DCh
    & Y! F& i: H1 z( }7 Y) C2 u
  32. CSpace:10015073                 push    eax             ; lplpDD
    . A+ U9 j8 s2 M! w3 ]' E
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]+ W9 {% T& Z: q, q" \2 ^
  34. CSpace:10015077                 push    ecx             ; lpGUID1 k0 _0 `: o; ?
  35. CSpace:10015078                 call    j_DirectDrawCreate
    9 x! ]: [$ `! i& V  x% F
  36. CSpace:1001507D                 mov     [ebp+var_14], eax! u9 E4 |/ m; g" I9 M6 M
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    : Q# L# ~3 l% F  a1 u+ f
  38. CSpace:10015084                 jz      short loc_1001509E
    4 j2 I0 z7 x; Y( |' g! V3 `) t) y( _
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    ; y4 }! v& \( B2 k: A
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    / w3 O9 k& X4 y# f
  41. CSpace:1001508E                 push    eax
    0 i6 z) L2 B/ f6 }
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    1 g1 u7 ~) Y7 n8 G) y
  43. CSpace:10015092                 call    sub_10038F3C3 M2 F; X6 B! f' P* j& i
  44. CSpace:10015097                 xor     al, al- g( N! X+ O$ ~( _
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

0 v' y3 j( o. z8 V5 Z' w7 x0 x) Y, O" T' C$ y  S" u) l: r2 i1 e
5 S! v, W2 D, ^- n
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.1 ^+ l6 l) U. w9 y3 e% d5 ]8 U- v+ z
记录到log_GL.out文件中。以下是摘录的一段。
5 C. U! @+ }* ]1 {' M- N我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。0 U# O& M: a0 D5 B
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
, o: n2 M5 E9 Z$ x2 w: N
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    " C0 l" j2 N" q2 l" m/ ]1 y
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>. d  j7 @6 ?- ^6 W4 p
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    & _% L+ X" Q+ O. S7 f( R4 e# H
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>% v3 p# u0 }' H; C0 [5 J# @- C) L
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    . b$ ]; ?: @0 q& p
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>& z& n  Q$ M9 }) D+ l
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>9 F2 G6 L5 X$ @  r5 Z
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ; {- Z0 Y# S" e0 B. [6 l: Z
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    9 ]1 t6 A& I( S9 s: I0 ^( U
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>& k$ Y/ r7 |  Y1 y
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>7 O1 ~7 d1 I: v& k; x5 v/ P
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>) d. i- ~! q# C/ T; m; Z9 e
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>1 l! |$ q/ Y. x- f
  14. glClear, GLbitfield<256>. v2 z# }0 D$ H: {) t
  15. glShadeModel, GLenum<7424>( N0 h, O7 g0 ?) t0 W& n- o5 b
  16. glDisable, GLenum<2929>
    # a% e5 t7 ?' s; m/ D, e3 m/ h
  17. glDisable, GLenum<3008>7 f2 ~% H6 J. m) W4 ?+ I
  18. glDisable, GLenum<2896>
    : R$ p2 x1 t7 E% i1 k
  19. glEnable, GLenum<3042>
    / e6 j/ n. ]% ~/ c( U" E
  20. glDisable, GLenum<3553>/ c' y1 {  e# y
  21. glBindTexture, GLenum<3553>, GLuint<631>5 r) F$ i4 k/ p
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    5 r7 c# i/ |4 A6 V0 |
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    3 J) c4 w$ u8 g. z) \  ~7 f  F( _
  24. glClear, GLbitfield<16384>0 o3 h/ F% f3 d1 z( A& }. O
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>( ~( q( Q3 s2 e+ z, |2 {
  26. glEnable, GLenum<3553>4 M$ N8 a% L5 X4 N% @
  27. glBegin, GLenum<7>+ _) e$ s( K2 u
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    5 b. c7 q) ]6 G$ J4 n
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>3 T5 n$ ^% u; A8 T7 b
  30. glVertex2i, GLint<0>, GLint<768>
    9 o% ?3 @" ]9 c9 B2 o4 {
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>% w5 I. u( t7 S& K7 N1 K/ A* g  D
  32. glVertex2i, GLint<1024>, GLint<768>6 E6 L" Q4 _! n# o3 v) p! [4 a% R
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    5 P. x& P' \' E( R, \, q( S; v( w
  34. glVertex2i, GLint<1024>, GLint<-256>
    " h" K. ?+ r8 x' n  q  @
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>* [4 A9 J: U+ q) o& O! I
  36. glVertex2i, GLint<0>, GLint<-256>5 x% F' ]: O' L+ D7 F# S
  37. glEnd: z8 B# G, c& b7 \' J
  38. glShadeModel, GLenum<7424>
    , d) I; F& `1 U/ p. B8 k
  39. glGetError
    $ ^" E- z' y4 O3 ?8 x
  40. glDisable, GLenum<2929>
    ; \' L. i2 ?% s7 h
  41. glGetError
    . @( l- p* L2 ]6 @! H: G9 [* y
  42. glBlendFunc, GLenum<770>, GLenum<771>' X5 ^8 P* Q* E- ?% y
  43. glGetError9 H7 l0 E7 q8 }0 Q1 S0 o
  44. glEnable, GLenum<3042>
    ( F8 O( F6 y. L' \+ I& `  A: w$ p
  45. glGetError
    . D7 x( k1 ~4 n. Y
  46. glDisable, GLenum<3553>3 a7 I; ~  w3 d" n5 c, n
  47. glGetError
    " k* [1 G, ]6 u0 e
  48. glBegin, GLenum<7>6 }) G2 |3 F$ q4 ?
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    * \) s4 B9 M# @" v3 {
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>! R  i5 W2 T. N: F/ B7 {
  51. glVertex2i, GLint<0>, GLint<768>
    8 X6 F8 w1 ^% e8 H$ b7 D" w
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>: c; A/ l/ m5 ?, I/ q
  53. glVertex2i, GLint<1024>, GLint<768>
    % `* z, ~7 y6 ]5 X, b
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>6 v" Y0 P* X; t
  55. glVertex2i, GLint<1024>, GLint<0>% L1 J% m- V4 H3 Q
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>4 n; e0 Z9 j7 O* r
  57. glVertex2i, GLint<0>, GLint<0>! y) C: S, S& h3 F8 U7 d/ L
  58. glEnd
    * P! y  m6 W3 c- Q
  59. glGetError) j, U: f: N4 \
  60. glEnable, GLenum<3553>7 l2 x& m7 a  M2 G; Z# E( u) T
  61. glGetError
    . M' G& m+ c1 E
  62. glFlush& S( ~1 E) o4 e6 k
  63. wglSwapBuffers- N' S7 ^- o' B2 T4 g4 f+ k  k
  64. ---------------------------" G% [( R# c3 z  J# h# {
  65. , HDC<-33484711>' ~" s6 I' `! F' [1 X6 R
  66. wglGetPixelFormat, HDC<-33484711>3 m) a' I' n4 W
  67. glMatrixMode, GLenum<5889>
    / k8 N) U7 k& m; U  |
  68. glLoadIdentity
    % ~6 J3 [: G* N2 T* w
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>8 D4 I" j+ h, G- o; G. @
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    8 z- R* G5 a9 m( Q# m# U, U- N( G
  71. glMatrixMode, GLenum<5888>
    . \) A" L. Z8 R( |2 |( S
  72. glLoadIdentity" k" U- `8 H( _% j+ p
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    5 r& ]! f+ f$ `1 L# q
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>/ p7 d7 z  }2 N% B7 ]0 o( S
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>: s! D4 }$ P$ a( }; N  B
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>; ~4 s! W7 p# G& G
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    9 \/ `4 `; b0 ^5 E5 j! a. z7 b, L
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    8 e0 [8 h, l4 L- q
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
      i, |7 @" O, X& Y9 a3 a4 P0 h
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    7 _) ~8 L" B3 u* \' ?+ }" J, G
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>: u% c8 X' l6 u
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>2 c, D- Y7 G6 A3 n
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>0 w( e6 v$ Q& A7 }( a
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>: L3 n- J6 S0 i# I9 n" M
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>& Z6 E6 G# X$ Q0 W# C+ f  `; ?8 @
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>; b' O/ k7 Y1 y- O
  87. glClear, GLbitfield<256>2 l" D$ K- f; _! V/ Q; F1 H9 K
  88. glShadeModel, GLenum<7424>
    & I! y6 d9 L7 j) R9 c9 A' V
  89. glDisable, GLenum<2929>8 h3 \1 U' t1 \8 ^; h
  90. glDisable, GLenum<3008>
    3 l  ~- q9 j  w1 s& Z$ d' A6 e5 A  O
  91. glDisable, GLenum<2896>: Z. O" D6 D* v  ?
  92. glEnable, GLenum<3042>7 W) W+ d9 P! Z. R" Q( M# u, e/ N
  93. glDisable, GLenum<3553>
    ' Q3 _6 H0 I$ j6 u1 I; o' a
  94. glBindTexture, GLenum<3553>, GLuint<631>/ D+ p6 _) ]: W9 M2 z  O/ ^1 r
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    6 H0 D4 N7 T& }! t
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    $ x3 g7 m* ^" E. G
  97. glClear, GLbitfield<16384>% ]* f8 C9 C0 A
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>2 h. c3 Z- b9 j& \! [( q% r
  99. glEnable, GLenum<3553>
    , }( w5 g0 E' f3 `
  100. glBegin, GLenum<7>
    1 t/ b) \. \. f( L
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    3 N+ U9 _& i% U! k% e# C" }, M
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>: V7 U( x- H6 `  ]) L
  103. glVertex2i, GLint<0>, GLint<768>
    1 R4 O6 B* X; Z* ~% f7 R
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>1 g4 t8 d/ w" `: N. b$ k% `
  105. glVertex2i, GLint<1024>, GLint<768>
    ! T  ?- t# N/ Y: L( W
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>, @& y: Y2 q; f0 c+ G5 ~0 _
  107. glVertex2i, GLint<1024>, GLint<-256>
    5 D9 r; e3 u9 q( W
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>- H6 B7 o! A" k1 l2 R% @8 M; h
  109. glVertex2i, GLint<0>, GLint<-256>8 G, J! \* T% C- V7 C
复制代码
7 g2 n; x; \. o8 c) E7 B  }
, H$ Z5 g: y. i6 B% k4 `  T1 x
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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