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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 8 t+ E& P# b; d4 P  ]2 u

  k: l# S: c# x* `4 J, R本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
2 W# T7 @' k9 a% U  j游戏应该实际只用了其中1个,暂时作下记录。! G1 j, v& d; c/ e
3 B# I' d9 _* e" g0 [+ P, ?
DirectDraw是由bin目录下的ddraw2d.dll来完成的。/ n# a0 k4 L1 |" f- L5 N
以下是一处的初始化代码
$ X1 J  m+ S) }. i* U* x% e' D
  1. CSpace:100150154 z4 P8 G" u* M6 _5 M7 V0 Q6 N1 T! b
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    2 w& x* `# D# b7 p; o3 N
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    * l0 O4 h8 e6 I. m$ [* C
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    ( F2 H* Y! ^+ A3 ?: H3 E
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    2 n! X4 Y) O/ q9 F* _) V
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]6 w1 }; P$ i. V7 K7 P
  7. CSpace:10015029                 test    edx, edx
    3 X# V2 y0 l* t+ U) L. H
  8. CSpace:1001502B                 jnz     short loc_1001503C
    $ E+ m" V, r8 F
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]& h1 g5 W- U! \4 [
  10. CSpace:10015030                 mov     ecx, [eax+230h]# E) g2 C2 H( Q& p- p) W
  11. CSpace:10015036                 add     ecx, 8
    6 @/ {) W: u. ?; p# I
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx) s% z. i, E2 s, f
  13. CSpace:1001503C0 M  h' q' k% l+ d) d
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    ; t& X2 }  F! v! w% e2 o+ f
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    % O* U& S- `! N" Q$ n
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    5 W- k! Y. i% P+ u# J7 h: V2 e
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    9 s; Y1 U$ D7 i( H) g8 }
  18. CSpace:10015048                 push    edx2 R0 w% C( U3 |/ J: `* e
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]/ K, u! O6 A9 V% @
  20. CSpace:1001504C                 mov     ecx, [eax+230h]& o* J2 ?( D, r, L0 O0 E5 m
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    1 F+ J; }; M! I3 A5 I4 n$ I
  22. CSpace:10015055                 push    edx
    * y& K# l$ w3 {
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"( M, f. F" R: J; [; X1 F& D" p' X
  24. CSpace:1001505B                 push    3( D& _; c6 F3 U
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong], f; l- A2 j% c/ s  l2 c- X
  26. CSpace:10015060                 push    eax" L# N! d: J# C1 U# H8 Q
  27. CSpace:10015061                 call    sub_1003882A
    ; h; i0 p  ~4 h! Y' O
  28. CSpace:10015066                 add     esp, 14h8 ?8 S. z: t" n* G6 l' w
  29. CSpace:10015069                 push    0               ; pUnkOuter$ T* X$ T+ l( u
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]. O8 B0 ~4 J0 u: Z4 Q- u! j
  31. CSpace:1001506E                 add     eax, 1DCh6 L1 |9 H9 j+ T, I
  32. CSpace:10015073                 push    eax             ; lplpDD
    ) a8 G& o& v/ J" E  k- r
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    ! N3 m, f. i* h" J. ^
  34. CSpace:10015077                 push    ecx             ; lpGUID1 `  _- h- ~) t4 W
  35. CSpace:10015078                 call    j_DirectDrawCreate, G7 z/ {, R7 X& s, u
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    6 E& j' x/ c9 k3 L6 z/ s" i  S
  37. CSpace:10015080                 cmp     [ebp+var_14], 0" e# l- H0 P% d
  38. CSpace:10015084                 jz      short loc_1001509E" x( x  J+ \" [! o* p
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"* ^; R9 I! y. p5 T5 M
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]5 o$ M0 w- t+ E5 A7 ?9 L( `& X
  41. CSpace:1001508E                 push    eax7 G; Y  k# J- P% l/ h
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    9 q# `6 |5 T1 Q6 F6 V, K
  43. CSpace:10015092                 call    sub_10038F3C
    # S' [5 {1 D5 j
  44. CSpace:10015097                 xor     al, al7 k, }1 ?3 K7 ~5 j5 S" r
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

, R7 d. h- X& F7 U; u% o
2 Y5 r4 k, Z' w' F
/ X5 ^/ r- ^+ H# E5 `9 c0 H8 T4 [我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.! b$ e% p( N+ C
记录到log_GL.out文件中。以下是摘录的一段。/ y( L9 K) [% b% z; |6 I
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。0 m* v7 m9 E: h3 L4 l, R0 `
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?. }8 D( Q* N/ i8 _+ [6 b; W& N- c
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>4 d7 d& `) d2 m: S8 e, @; \
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>2 [. j1 m. H9 W
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>) Z4 b. u6 \0 o: T0 w, L
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    + K$ L2 d0 {( J* t/ g
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    0 D* F9 m" B8 T# W; L) J6 f
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>6 P2 c& O  ~) _
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    % h6 K: V6 b5 L$ t, I
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>, i- n% d9 x0 O; G5 G" }! Z
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>: S. [  O( y; r, U' c" q8 @
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>; B' p# `6 ^% p5 U) r! j. q  I
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    5 \* G: N0 P, |' q  r
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    $ q0 t/ h" C+ M9 S8 n3 ?
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>$ _. ~- [' h$ Z3 J" K4 P
  14. glClear, GLbitfield<256>
    & U3 Z3 y- ]2 ~+ s. m7 B: w0 I
  15. glShadeModel, GLenum<7424># `5 {% h$ A! I) h
  16. glDisable, GLenum<2929>7 o1 A; ?& o* i) m$ U
  17. glDisable, GLenum<3008>$ `6 ^6 @9 I* U% P1 O$ k8 g
  18. glDisable, GLenum<2896>
    , q$ }. G) q  Z- G' o
  19. glEnable, GLenum<3042>
    2 V! ~6 `$ q. l9 E" z, c, F( C6 P
  20. glDisable, GLenum<3553>
    0 e4 ~1 V9 Z; T9 o& K
  21. glBindTexture, GLenum<3553>, GLuint<631>' ^4 ~+ ~- _' [2 {; h
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    & q* i7 a( r0 a/ E& i) h
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
      L7 {' L  p5 X
  24. glClear, GLbitfield<16384>+ R, l, }6 ]& }' @0 d
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>$ K4 y3 H) w) e* g) i2 q
  26. glEnable, GLenum<3553>
    ( ^! I5 Q5 x' H# Z* f+ D
  27. glBegin, GLenum<7>
      |6 ^# F" T& D6 U! o) C
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>! b# k9 {& p. w+ v- y$ H" a& U7 t$ U
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    : {( T2 c6 d7 u$ \7 _+ D, V
  30. glVertex2i, GLint<0>, GLint<768>% f: _# Z( Z# ?' i7 {
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    ' L, S% v: ?/ S) H) e& ]/ `
  32. glVertex2i, GLint<1024>, GLint<768>
    9 H' o$ f' l! H% E5 ]- L
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>; o2 ~/ m7 |1 k; e4 @, \8 s' M8 F
  34. glVertex2i, GLint<1024>, GLint<-256>8 M7 ]- y, Q0 }3 l# Z
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    9 I3 {$ f; X2 G; G2 J
  36. glVertex2i, GLint<0>, GLint<-256>
    5 O, }. ?& e: y
  37. glEnd6 a, k9 N9 V# T9 ~0 B" u: R: g
  38. glShadeModel, GLenum<7424>, ~4 R1 M' K/ ?5 ]+ e, V
  39. glGetError
    ) D1 K2 s4 @3 v
  40. glDisable, GLenum<2929>
    ; t6 v3 H# g, D' [
  41. glGetError2 w( F# @* j2 t# R; E  W- I* r
  42. glBlendFunc, GLenum<770>, GLenum<771>. \$ b( {! J2 l/ n5 f0 \
  43. glGetError
    9 o9 a$ W; ]6 M6 a3 z, A
  44. glEnable, GLenum<3042>/ A( ?; V, ?. R
  45. glGetError
    0 a$ j. B) ]% {3 j* w
  46. glDisable, GLenum<3553># o6 ~7 p7 x- D! H* H6 \) G0 d9 E% j
  47. glGetError
    ' N) o3 W( p) p3 Z1 i2 ^$ l6 J
  48. glBegin, GLenum<7>; m# }$ F( g9 \: }- e9 _
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>/ F8 N- U! x7 X7 A& ]2 h! r9 y4 t0 z
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    3 ?' [' }: J# E! A+ l0 d  l' j& r
  51. glVertex2i, GLint<0>, GLint<768>: y" l7 |+ S+ U9 T$ |
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    # }, K# E  I$ P3 v  ?* X
  53. glVertex2i, GLint<1024>, GLint<768>
    - c$ K) G  J3 o9 ]
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    0 l! p" o; D; Y; p' @
  55. glVertex2i, GLint<1024>, GLint<0>1 C$ }$ E+ M7 s$ C8 ~
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>. H( V4 C2 L2 I& g; y
  57. glVertex2i, GLint<0>, GLint<0>% A" ?- b! t( V7 t' _" N
  58. glEnd
    ( u1 J) y8 y& V9 R
  59. glGetError- ], c$ v# |! j7 m# o4 C
  60. glEnable, GLenum<3553>
    6 F" g' \" Y: J( z' A5 i
  61. glGetError" V  r( m! _8 [
  62. glFlush
    * x" Z) h1 p- P5 U
  63. wglSwapBuffers$ t1 e, w, ~  C+ j
  64. ---------------------------3 n9 T- n' J" z1 W) y6 m
  65. , HDC<-33484711>; {5 U% a" i8 v
  66. wglGetPixelFormat, HDC<-33484711>9 l, R* x, r6 f$ Q
  67. glMatrixMode, GLenum<5889>
    0 h( [9 H0 {9 z  L
  68. glLoadIdentity7 z* G) x8 N. b7 H8 V+ {/ C
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    ' w! p; I9 |- _0 i, A
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>5 M" f6 A! J+ N" m6 l8 f; n2 t
  71. glMatrixMode, GLenum<5888>
    ; L3 c5 g4 y, _
  72. glLoadIdentity2 D) ^, w  D% q, Q8 X
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>  t1 v6 m% H+ B! N9 F: y+ i
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>" i0 D/ V6 Q3 V  q+ h( c& x: |
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890># b. M% Q( {5 W/ [& H" Y3 B
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>& \" p: L% C4 M9 Z) z
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>8 I: i3 U% d4 A
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    ! W/ g* i1 g8 }3 S. ^4 c
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    7 U2 w. i9 \' C
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>% g- i3 G2 }) H8 Q& L* j
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    6 ^( a2 n4 T6 ?
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    * O$ C, x' c, U3 F! W* Z
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
      ?& `' X# d, j
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>2 \# H5 T3 P  M7 Y. X- E+ y
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>; |: _8 P! z& h) m' x% O# _
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    ' v' ^% f, Z# I2 L: k
  87. glClear, GLbitfield<256>$ b: a. C% t; `
  88. glShadeModel, GLenum<7424>
    / u) T! N2 O3 N2 _
  89. glDisable, GLenum<2929>
    ) ^8 T  Z% n( w" \3 i. P
  90. glDisable, GLenum<3008>9 b9 P5 }# t' y" |: ?# E; w
  91. glDisable, GLenum<2896>* l. W( h/ |  W1 g. J% Q) F
  92. glEnable, GLenum<3042>
    6 g9 q9 n5 b' G! L- E7 a$ l$ F1 k2 N
  93. glDisable, GLenum<3553>- F$ s3 L1 [: {( p& b' d" G( l: U% g
  94. glBindTexture, GLenum<3553>, GLuint<631>
    ! n0 O6 D- |8 n
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>9 \  a; i% _7 n3 l
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ( u$ t, `: Q' l6 H, L
  97. glClear, GLbitfield<16384>
    # m6 _8 E: ~# B$ W0 E
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>3 `+ Q" p4 f; E. o& M1 l9 W2 D
  99. glEnable, GLenum<3553>! Z: x& D6 {4 V
  100. glBegin, GLenum<7>0 o' b4 C5 F1 V/ `% _
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    7 f1 {* b8 D" k" S3 k* O9 L
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>  |. W; A1 d; h6 h- B3 N3 J. B
  103. glVertex2i, GLint<0>, GLint<768>
    4 @! k, }% j+ O8 M
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>- L( w# t& [4 O. }+ n
  105. glVertex2i, GLint<1024>, GLint<768>
    ) Z  [# Y( M" }$ o- \
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    * m" @/ o1 o) S- n
  107. glVertex2i, GLint<1024>, GLint<-256>
    6 k2 ~' _: Y. `! y
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    5 J5 C" e+ U9 C4 s. t* m
  109. glVertex2i, GLint<0>, GLint<-256>( m+ Z8 ?6 `: V* C3 e
复制代码
- V$ U4 W' Y1 E$ R4 T7 Y; G

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

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