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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 " P7 y8 `$ ]9 S

  U3 j4 ?# U* s" {1 Q本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,/ l* n. \1 m! R8 H4 X
游戏应该实际只用了其中1个,暂时作下记录。
; W4 |0 P9 N4 u8 r  {0 q9 a+ x) o  S) @( W8 m8 {
DirectDraw是由bin目录下的ddraw2d.dll来完成的。
, B& F, _: S$ r, U/ K/ X6 h% K" H以下是一处的初始化代码
* a; ]4 S$ _( l3 T+ Y1 I/ n
  1. CSpace:10015015- K  y  T- h# p& |
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j$ i( U! c( M% k* ~4 r5 d
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0+ i1 q  ]) }% k* m/ D
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    % m$ |( j7 N2 b; b9 S
  5. CSpace:1001501F                 mov     ecx, [eax+230h]7 a- z% T1 _4 U) c  z, R4 r
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]" j! \4 d" N6 [, w( |! G
  7. CSpace:10015029                 test    edx, edx; |2 o2 }( P* _/ A$ T% J, T8 c
  8. CSpace:1001502B                 jnz     short loc_1001503C2 a- l% |9 J" L+ E* q
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    : q0 h, {; G) K- E8 e% y* o4 I6 w
  10. CSpace:10015030                 mov     ecx, [eax+230h]4 F# h6 `( l! T' V9 {- b% |
  11. CSpace:10015036                 add     ecx, 8% x. M* \9 ^8 Z  t  T5 Y9 m
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx6 v5 b' Q. P/ `8 h
  13. CSpace:1001503C# u1 G. D+ F( Q
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    / O! \/ S# V/ R
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    1 K8 O  p9 B( P3 x
  16. CSpace:1001503F                 mov     ecx, [eax+230h]* e$ H+ x! g" ~$ M, q* \
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]! }- ~9 E. k; ]6 n
  18. CSpace:10015048                 push    edx' S* p8 v( M: m* A6 ~: ~
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    * @4 W: G; K5 Z8 V+ K. ^1 ^
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    ) R/ W5 l. Z: D' g1 z% F
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    . X: O$ C% M$ e& I( O
  22. CSpace:10015055                 push    edx
    & ]: H% `1 h! a9 E% ?
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"0 w- _8 \5 q3 p  n  v
  24. CSpace:1001505B                 push    3* C3 g% n4 [% ~; k
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    8 a3 W9 s7 D4 G0 P7 `; `
  26. CSpace:10015060                 push    eax
    ! j  t) E2 L$ M9 y; Y* L6 K
  27. CSpace:10015061                 call    sub_1003882A0 U# y# l0 Q3 q( p
  28. CSpace:10015066                 add     esp, 14h
    ) J1 [4 c- K2 G
  29. CSpace:10015069                 push    0               ; pUnkOuter
    ; ~- R7 W; Q. z& [' g
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]6 ~  X- \0 o* O9 L
  31. CSpace:1001506E                 add     eax, 1DCh
    ( }$ @; n3 }7 a( U8 ?" c
  32. CSpace:10015073                 push    eax             ; lplpDD
    & k& O2 \8 a: I: U# m3 d% U
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]9 u8 [& S# @8 Q# I0 P
  34. CSpace:10015077                 push    ecx             ; lpGUID7 e* b- v( P  [# ~
  35. CSpace:10015078                 call    j_DirectDrawCreate
      Q$ O  a% b  U% _  ]9 Y
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    # W# n9 q, w3 t# [4 q; x. o8 L/ p
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    2 t! W; }" t2 e- R$ y
  38. CSpace:10015084                 jz      short loc_1001509E4 P) T3 Q: V$ |  X
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n": F1 F: Z& Q% @# \/ x6 L& q8 @
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    5 Z( y6 j$ _' h& K2 H
  41. CSpace:1001508E                 push    eax
    , k- D) F3 o: I! N
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    : y. i, {/ U* ~2 j+ g
  43. CSpace:10015092                 call    sub_10038F3C
    " m' o. @/ F! p) L7 W8 r/ g
  44. CSpace:10015097                 xor     al, al
    8 v4 E9 y0 f- C6 p
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
2 g) E5 G) R7 Z4 {9 x: ]
) P7 B' Q, I& ]& L" `
0 C3 ]# n5 i/ a+ b2 p/ a
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.5 n8 r6 h, Q% x, v
记录到log_GL.out文件中。以下是摘录的一段。7 p4 T& r, V* o9 X
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。1 X: t. F+ U. X* n
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?+ z4 Y- P& R  `
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    8 s8 A# }$ Z. Q! u; \. W1 a
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>0 g/ B) L& P% f5 C5 V  i* K# Y
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>9 u4 H$ ]7 o0 w2 q. `
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>2 {  T& _4 u! K3 Q8 m/ k
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    3 V0 g' D* v1 e
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>& c; Z- d# f, X% Z& R
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>* {0 Y/ }& n8 f) @9 l% A) Z
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>- {5 C" v0 u+ c, a, T' J
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    8 ]( w( R2 h5 _3 y4 [3 p& H2 Y9 G$ {
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>5 @+ e! Q# d7 W% w* l7 @2 r* C
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    - u, n$ T7 {( c1 O+ E+ ~7 W
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    9 T3 i9 q5 z) \& _* @! o: z4 d# d
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    $ \$ [$ j4 _0 P% w9 C
  14. glClear, GLbitfield<256>( g0 X: U2 U0 x
  15. glShadeModel, GLenum<7424>
    8 v4 q' u/ q6 Q# j+ d5 e0 P1 q
  16. glDisable, GLenum<2929>
    $ e. Q+ y4 _1 [  [5 `5 V0 W' E
  17. glDisable, GLenum<3008>
    3 i0 e: K5 w- T# Y2 @3 ]
  18. glDisable, GLenum<2896>
    ) d4 g* K' ^+ w2 E. q# J" i
  19. glEnable, GLenum<3042>. v5 c' D: i: h" \+ b
  20. glDisable, GLenum<3553>
    + U+ Y  p* t- T# b5 q4 O
  21. glBindTexture, GLenum<3553>, GLuint<631>
    . n2 M  F3 t# M2 l
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>) i2 m# ?; L; ]% u  v0 s
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    9 l. e. Q/ q/ W/ I
  24. glClear, GLbitfield<16384>$ W7 J+ w  s6 C" Y
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>3 w" L7 r: ^, f" c- j# a
  26. glEnable, GLenum<3553>
    % a2 K) I3 n8 N) y$ d, x$ ~
  27. glBegin, GLenum<7>3 y4 x1 H6 Z! m, ]" M5 T; ?, y
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>- ~5 |7 X3 C/ ?! K. B
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    / G( ~0 j$ h: c; `
  30. glVertex2i, GLint<0>, GLint<768>
    : m: i) s, ]% O& s- b
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>& C% T4 d- p4 G( G5 o: Q
  32. glVertex2i, GLint<1024>, GLint<768>
    ! m- H& L) F- G
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>8 R  V4 n- @7 E
  34. glVertex2i, GLint<1024>, GLint<-256>
    " x: T; v3 E6 k4 Z$ e
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    8 d5 X% u' a- @" V% S! M# r
  36. glVertex2i, GLint<0>, GLint<-256>
    2 h. q& t4 q1 h6 j2 N. `
  37. glEnd
    4 i; q. Z  I" ?4 O0 N) p5 ^
  38. glShadeModel, GLenum<7424>
    9 c0 `% u& T/ y2 G( ?, w
  39. glGetError
    3 B; S1 e* m* W/ E) a7 f
  40. glDisable, GLenum<2929>& _' J$ l% p5 x& ~1 S
  41. glGetError( E3 G" _$ M0 S5 j; m
  42. glBlendFunc, GLenum<770>, GLenum<771>: p- g2 e3 T2 Y: G5 k2 a" F" G
  43. glGetError7 c0 o; D$ B0 w* ]$ ?) M8 p' b6 Y
  44. glEnable, GLenum<3042>1 p# D2 u5 [8 f1 f6 Q  Y5 R* B) w
  45. glGetError
    $ N: _: U1 W. h$ y4 l
  46. glDisable, GLenum<3553>% S  ^( _/ e/ @# ^* g
  47. glGetError; z6 ]- A. c' A" @
  48. glBegin, GLenum<7>
    ; K- v9 c% k3 f7 [8 i9 h
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    - E' ^9 J2 z) Q4 M2 i
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>- }* h1 l# P0 m
  51. glVertex2i, GLint<0>, GLint<768>
    + R. @2 O# n$ }" e3 e
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
      D- I7 S) e+ `# E; I
  53. glVertex2i, GLint<1024>, GLint<768>. v- J& ~( d% w9 t: P; ?
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    $ h: H5 Z' M5 _  w
  55. glVertex2i, GLint<1024>, GLint<0>( \. J! p6 w6 j5 @" y
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    & b' N5 n0 V+ [, H; p( |* v) b
  57. glVertex2i, GLint<0>, GLint<0>
    " T- |  x$ x- p% O4 a3 z  J* I; y
  58. glEnd
    2 d8 P' T3 u/ k3 W  v
  59. glGetError
    5 B' U3 u" y4 ~% o
  60. glEnable, GLenum<3553>
    ) V4 k8 \: |+ [- E
  61. glGetError, Y  i; T- ~, m! [' w# ]
  62. glFlush
    4 S" y9 {3 d" i% h; r
  63. wglSwapBuffers- O- w" b2 a3 U* Z$ L# M
  64. ---------------------------. O% \6 p! w: M& I5 X! X5 B$ W
  65. , HDC<-33484711>
    7 ~8 }$ D7 i9 T  ~
  66. wglGetPixelFormat, HDC<-33484711>
    ) u- k" I  _( h3 }
  67. glMatrixMode, GLenum<5889>; |: i  g" X7 C8 A( D9 W1 y; x
  68. glLoadIdentity/ f: I0 `2 a9 ^5 V2 A5 c
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>" q. {4 d% f7 K+ M) v9 |
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768># t) l5 C3 a$ q: ^; ]8 o; y- {
  71. glMatrixMode, GLenum<5888>
    0 J  |$ O+ q1 r* L& A
  72. glLoadIdentity. n8 b- C/ M* ^; `
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    2 E! [3 @) h  x8 w  \
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ; L/ D8 ^, g/ I- B
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>7 I  K5 F7 A8 P0 J& K
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    ) L0 V5 p7 |6 _$ K5 O
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>0 ], A8 a( G" f# H
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>) A% m$ c- J" V
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>6 G2 D; N/ j0 D
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>6 g: E6 J2 U' ]1 \
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>1 G9 a( i! v8 S6 x
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    ' I# C# \" T% P
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    ( ]+ s9 N. b0 {
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>( ?9 I# r% \6 g) p6 z
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>' e8 [4 b: n2 [* s' h  ]
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>, t) @4 O7 d! f) z
  87. glClear, GLbitfield<256>- N2 {0 u# }3 b. E, X. e
  88. glShadeModel, GLenum<7424>
    $ l; Z6 O) b4 [, X
  89. glDisable, GLenum<2929>
    7 b, ]( r, E7 h+ C6 A
  90. glDisable, GLenum<3008>) E* i' c7 I* c) \' T6 Q
  91. glDisable, GLenum<2896># d  x4 b" f6 e2 J- x$ D. i
  92. glEnable, GLenum<3042>$ R. l+ f0 a* E- q/ h8 p
  93. glDisable, GLenum<3553>
    + S, B" B7 Y- M7 j( \- a. }
  94. glBindTexture, GLenum<3553>, GLuint<631>5 {7 p0 K( E4 p. [) A' e  b
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>) [4 `; j% h" U3 J5 z
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>! f3 r+ x0 Z$ U% B  }" Q
  97. glClear, GLbitfield<16384>, J( I5 p( H2 _4 k, b2 ^# W
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>; W6 y9 ^0 ^8 J9 b) @. u
  99. glEnable, GLenum<3553>. d2 B; ]; }3 f
  100. glBegin, GLenum<7>* ^$ i* ]$ j+ B- K- k0 u4 I
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    * q5 ]: W, D% ~! B5 g4 w) }
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>, W: F& ?( f: d7 O6 e
  103. glVertex2i, GLint<0>, GLint<768>  `1 p# G3 k4 [$ o
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>2 J. F$ D. E3 P# d: T: R6 S
  105. glVertex2i, GLint<1024>, GLint<768>
    ( X$ F' m5 ^5 X9 w. o. E' W
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ; Z0 m4 `# G' ?: K0 \3 F  x7 o0 ^, k
  107. glVertex2i, GLint<1024>, GLint<-256>9 r; l9 l: [' f2 S
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    ! S* o) L8 Z  d
  109. glVertex2i, GLint<0>, GLint<-256>( P, c" w) k) w4 P6 a, Q6 N
复制代码
- u6 j2 S; y; S5 @& O
4 S4 m) ?: G/ C% U
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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