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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑
8 j4 C, U6 T3 A3 Z: P
$ ?: u# O) V3 a7 T本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
4 d6 h' e5 ], X# w* h$ o游戏应该实际只用了其中1个,暂时作下记录。
" k4 }9 a1 r+ B6 ]  J- ]  V7 [3 e& l' q7 X* w
DirectDraw是由bin目录下的ddraw2d.dll来完成的。. L# @, c; m% K
以下是一处的初始化代码9 b( y0 m; _" Q9 x; g# G
  1. CSpace:10015015$ H3 y9 ]3 k) `
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j. s% v7 A+ \7 H6 m2 W: S) k( p
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    : ^+ u* |* @2 w$ I8 p
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    : w" T3 a% U6 Z! R: F0 U2 U+ f, M
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    1 M" h' O8 q0 |" D* P
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    9 @; c# S2 i) P. U( h
  7. CSpace:10015029                 test    edx, edx
      A0 k" ]" U  D7 o1 S! i
  8. CSpace:1001502B                 jnz     short loc_1001503C3 v/ y& b; b' E$ [/ r' T% r
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    8 `4 d% x' w; t( E/ W
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    9 h4 z$ N. e+ N$ [
  11. CSpace:10015036                 add     ecx, 8# ]) c) W4 `' l. v
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    * J3 d4 V0 n2 w1 y4 S  {) R
  13. CSpace:1001503C
    - L" i( }2 l: j% N3 ~- _
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    , ~" [5 R1 b1 n# g  z7 n* _( S
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]* B3 m( j# O6 N6 \! ~
  16. CSpace:1001503F                 mov     ecx, [eax+230h]! f2 s( U' L; ~
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    + A7 a1 R0 p4 @
  18. CSpace:10015048                 push    edx
    - B& [% k# r0 k6 g. J
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    # y- f5 l' ^9 Q+ J3 I, ]
  20. CSpace:1001504C                 mov     ecx, [eax+230h]" i9 O2 \  r& X( P" Y3 ^0 f6 J
  21. CSpace:10015052                 mov     edx, [ecx+20h]9 R( I/ U8 f6 Y! m2 [) F
  22. CSpace:10015055                 push    edx
    & I; G1 ]- r* Z( ~5 t% j
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)". _: N0 c" r/ C" z
  24. CSpace:1001505B                 push    33 d7 L( o/ e5 |, k1 l6 E+ \2 r
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]( p  T- `, Z( o' w7 e
  26. CSpace:10015060                 push    eax$ Q9 C" k: y  A& _! C6 \! R
  27. CSpace:10015061                 call    sub_1003882A* m% T1 ^5 S$ Z2 I$ Y3 X0 @
  28. CSpace:10015066                 add     esp, 14h$ P9 v: {! J$ m, Z6 R$ G% T
  29. CSpace:10015069                 push    0               ; pUnkOuter
    3 j% F4 s4 f) S% w
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    3 w; i5 y7 Y/ w: [; \" K# R( I
  31. CSpace:1001506E                 add     eax, 1DCh
    9 K+ W8 W3 B5 {5 d# g/ [! ]0 `
  32. CSpace:10015073                 push    eax             ; lplpDD
    0 L: y- n* P! Z+ d; }! R
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    ) y/ l+ C+ [- M7 E5 u
  34. CSpace:10015077                 push    ecx             ; lpGUID
    7 u& n" P$ d& a3 v
  35. CSpace:10015078                 call    j_DirectDrawCreate6 S+ Y7 S( Z( ?# {% \6 v: A
  36. CSpace:1001507D                 mov     [ebp+var_14], eax% t+ g! [- d: q
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    . L2 u* @& P5 ]% I! e: |+ V- r
  38. CSpace:10015084                 jz      short loc_1001509E, B; W1 @, |/ F% C% ^8 w1 t
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    0 ?7 N5 `& _" K+ |2 k) w
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    6 F% {" c: |  A$ W% g4 q( r
  41. CSpace:1001508E                 push    eax
    . Z; d. V  @- o
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]9 I% S, \  ]# n5 V. ?' Z
  43. CSpace:10015092                 call    sub_10038F3C
    7 [3 s0 ~, T" w; z
  44. CSpace:10015097                 xor     al, al" l5 Z: B( F0 Z& k1 s
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
& L2 }( ]) r0 R& J$ r" ]4 c0 }* w0 m( v
3 |  l) R; V5 f" C* |6 W

. g* j  H4 O/ n: `9 a我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
* e. q0 J1 L6 D5 m  ^/ u  Z记录到log_GL.out文件中。以下是摘录的一段。' x$ J' H6 H* A, ~& M# Q) ~+ n
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
1 o/ B7 G/ }  Z/ q以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
# N8 X, ~* p: @5 ]* T  z
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>4 J, |: ?# ?; z8 ]2 o5 ]' J! t
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>. g7 j$ B+ K( _/ h  c* T2 ^! o
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>$ V2 f2 l0 {7 ?  E! L2 [" Z' L+ ?
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>* C2 p3 Z2 Q! n0 |/ Y7 o
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    ) I4 ?. }0 Z+ ^5 j8 |; Y
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>* S+ W, r; _4 r* H) T2 E% c/ I
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>5 p& J0 R0 V2 h: \# p9 i
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>1 d- G0 l6 F9 t7 U9 W8 Y0 c% w! a
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    ; x6 E7 [1 x( V  o
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>% b4 H, G; G+ P1 ^3 T8 }% H
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    ( X8 ^2 A9 H# Q1 Z, ^
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    1 a2 a' I: E& e# U# g! v
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    & j3 \1 W& Y7 H9 p: h8 S
  14. glClear, GLbitfield<256>
    2 Q  M; K  N5 H% b
  15. glShadeModel, GLenum<7424>; ?3 n9 z3 X9 N7 g6 f3 m* j
  16. glDisable, GLenum<2929>
    - p0 z" O; _; s- a
  17. glDisable, GLenum<3008>
    . x/ B4 f' ?- M# K$ n* d' j
  18. glDisable, GLenum<2896>
    5 V; S  c( r, y! s& U4 @
  19. glEnable, GLenum<3042>: e' u5 O$ \( f5 V0 z
  20. glDisable, GLenum<3553># W* O7 p) J3 l2 R8 l% S
  21. glBindTexture, GLenum<3553>, GLuint<631>
    " {6 U5 z5 n: [
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    7 A& k3 {4 I6 k0 K: _( J; O
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>( {5 {' I, @7 ]
  24. glClear, GLbitfield<16384>) Y& m# |/ }/ M4 s
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>( V1 Y0 _3 ~/ s# x
  26. glEnable, GLenum<3553>
    0 b  |2 H# t% L4 H: a8 Q
  27. glBegin, GLenum<7>. X* M0 ^( Z3 f% U
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    % V$ \* A/ W/ t' p
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    , ]- w! D6 s% W1 \5 _
  30. glVertex2i, GLint<0>, GLint<768>+ O3 }5 B5 Y" T
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>; @# h: k" [0 `3 [5 P0 n6 ~5 E
  32. glVertex2i, GLint<1024>, GLint<768>
    " Q! f+ U  @; x% c8 b
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    & c. H7 X/ \0 G( T
  34. glVertex2i, GLint<1024>, GLint<-256>
    ! r3 M7 Z. \9 [/ I) M
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    : ^( b, D6 a" i. z( N
  36. glVertex2i, GLint<0>, GLint<-256>
    ( b4 A9 ~8 S/ S6 M7 W
  37. glEnd$ _" p" c) X2 L2 H5 P3 n8 N+ U
  38. glShadeModel, GLenum<7424># h2 z3 n$ A. r
  39. glGetError
    % a5 K( e  K' d0 i1 S) S
  40. glDisable, GLenum<2929>
    1 O+ P  L0 u) `; P
  41. glGetError, L- r$ q  f! f0 P4 [
  42. glBlendFunc, GLenum<770>, GLenum<771>
    / D) u4 W0 Q! W
  43. glGetError% a; J) Y8 M' h, g* P' U2 b! E. a
  44. glEnable, GLenum<3042>
    6 F7 X0 @% u0 V% O- Z7 B/ P9 ?
  45. glGetError; J& I3 r& s5 ^8 K8 r+ V
  46. glDisable, GLenum<3553>
    % u. t$ }, c4 B7 Y, t
  47. glGetError
    - }1 o$ m5 B* e
  48. glBegin, GLenum<7>
    8 p+ O$ ^1 f3 e$ G( ~
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    ! H3 t8 C0 M- |: O9 y2 E0 q
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>& @2 l4 d) C' Q  E/ ^
  51. glVertex2i, GLint<0>, GLint<768>
    ; s* K9 Q' Q9 t! x  h
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>4 Q, h; n. i- `6 z7 p
  53. glVertex2i, GLint<1024>, GLint<768>
    ; e& ]0 G  i" k3 p( A) x4 H
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ' Y2 d  v( X7 C  j+ `
  55. glVertex2i, GLint<1024>, GLint<0>
    # f8 Z7 C: p3 \! u  G
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    8 g! ?' ^1 f; h
  57. glVertex2i, GLint<0>, GLint<0>+ d/ H2 ?% C8 o. g0 d1 ?! o9 a
  58. glEnd
    / O6 u  O* \! h& j  z  w8 W
  59. glGetError* }* Y. h$ u+ O% B. \9 S  Z
  60. glEnable, GLenum<3553>
    5 S; K5 u& Y# a5 t; ~; Q
  61. glGetError
    " |/ o5 v2 i  h5 n
  62. glFlush- k+ X. a- D: W& s9 l( @
  63. wglSwapBuffers! x: _# u  b( a0 g
  64. ---------------------------$ N  S+ a( _3 O* {- T( O
  65. , HDC<-33484711>7 l0 H5 V4 m* r- k  u) y
  66. wglGetPixelFormat, HDC<-33484711>
    7 o4 C2 q# H/ d  ?, `7 V+ ~$ @
  67. glMatrixMode, GLenum<5889>" S" D& Z" B6 Y! F
  68. glLoadIdentity
    " ?, z4 [* _: F2 I) V7 k' M
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>1 n, J* u% v* v( k
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>3 O  o1 T0 g9 _7 a
  71. glMatrixMode, GLenum<5888>; F- s- }" o: L# C
  72. glLoadIdentity
    ( U. W+ O8 t. o/ x1 U" O
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
      l; h1 R9 n" g; N3 T6 s+ n
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0># i$ h4 g9 p2 L$ [
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>" ^8 y6 m0 v6 S( {5 I
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>& ^4 h! u2 @6 U, w2 r
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>0 f& I6 w) s6 F& H# x. r
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>  y9 b8 e9 U" N% ^9 O. h% q+ H2 J
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    ( ^1 a$ t8 c# B
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>+ q4 x" x' q4 J
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>, ]& W8 }4 W8 v& n- k& u* `
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>5 n1 ?3 Q, w4 _2 R" {
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    + G. N: w/ I% G9 d0 \5 u: _' j
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    - r4 I6 W* {  b2 W( q# J
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    3 I4 F; F' ~: b, \
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    2 D+ h( p4 K' v
  87. glClear, GLbitfield<256>
    . g, Q: g- |2 ?& D" J
  88. glShadeModel, GLenum<7424>
    7 l% @, B) X7 t% r! F( u, {
  89. glDisable, GLenum<2929>! T* i3 x0 D2 V  ?
  90. glDisable, GLenum<3008>
    1 @: b; X6 l) t1 @
  91. glDisable, GLenum<2896>
    : P+ }" P5 w  F$ y( M& X8 P
  92. glEnable, GLenum<3042>
    6 Y3 g& p. g# Z9 E4 h+ j* e
  93. glDisable, GLenum<3553>
    ! l' n% x# `6 H% {5 v  L: h
  94. glBindTexture, GLenum<3553>, GLuint<631>
    / A. u# K/ H3 V/ _; t
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>+ i) H5 U8 ]! E0 ], T: \# }
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>, w1 R3 `( v3 f$ l+ F9 {
  97. glClear, GLbitfield<16384>% W5 N% [$ Y9 w! ]
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>% a# X( B1 d* M
  99. glEnable, GLenum<3553>
    4 }/ N( {2 g* a. K. q, p  z9 h
  100. glBegin, GLenum<7>6 z+ b$ C# y+ \1 |) X
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    0 Q; g& J( f  b$ b( q& J" h6 r3 T
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>2 [) @% C# G! j; |" T2 h( F
  103. glVertex2i, GLint<0>, GLint<768>+ ?& r- B& M* J  L" e" E/ B
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    . C! w% ~6 w* y) K1 h5 D8 F7 r
  105. glVertex2i, GLint<1024>, GLint<768>
    6 q. `6 c- I/ E
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>. m( O3 o# ^& r0 d3 G0 O
  107. glVertex2i, GLint<1024>, GLint<-256>7 C, S0 _- |, B' G
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    : A* Z, ?9 M7 ^  B& r
  109. glVertex2i, GLint<0>, GLint<-256>
    5 \8 l- T# G8 T& Q' }! W% \' o# m
复制代码
- |" X( o/ Z7 b2 _

6 m2 }3 f  b% ^% K+ ~
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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