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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 / X- \. @5 c, m1 i: S( Z

* x0 V( I2 }, W7 l本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
7 K2 U0 |7 g9 N; Z7 z游戏应该实际只用了其中1个,暂时作下记录。
  T$ t6 G9 m; x/ _$ q; j- h( T1 a) O6 ?9 F" r& u" {7 T5 f4 s
DirectDraw是由bin目录下的ddraw2d.dll来完成的。# ^6 J( Z; S+ f7 Z
以下是一处的初始化代码6 A* E1 L8 B& g5 X: F' {
  1. CSpace:100150150 M/ Z' t! |8 d: ^" R! l
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j( R+ @2 p+ Q2 U* S6 f4 w" r
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    8 T3 S5 I: V3 G/ _
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    ! W4 ]* G% _' w
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    8 j  y- \/ Q9 I+ S  F, T
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]0 {) Z1 S; r0 v3 C
  7. CSpace:10015029                 test    edx, edx9 z4 E1 T" z, n6 p( a, I
  8. CSpace:1001502B                 jnz     short loc_1001503C
    0 I. r- X) a. n# U
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    ; y; U" ~: x6 K- H
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    6 Q1 |8 q1 }% f( ^2 ]
  11. CSpace:10015036                 add     ecx, 8" S% ^6 G. ~4 f2 j0 M
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx: }; R; \! J& W  z" g: @; k, P
  13. CSpace:1001503C
    % w- ?  @+ T& y, S
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
      Y4 y; u& A5 I. j5 f
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]) C8 k; b5 j8 E3 _! k- M1 x( T
  16. CSpace:1001503F                 mov     ecx, [eax+230h]2 K1 R7 g4 I8 d. H0 V9 L
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]. D% A1 p4 K* `0 w9 w5 P% K, q
  18. CSpace:10015048                 push    edx& b) y0 ~7 Z( k/ j# z0 ^
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    3 Z" o, R$ y$ X( X7 ~
  20. CSpace:1001504C                 mov     ecx, [eax+230h]) j  n2 W" ^6 \0 K3 u" B0 c* R
  21. CSpace:10015052                 mov     edx, [ecx+20h]/ X; L5 _: M: x5 E5 C
  22. CSpace:10015055                 push    edx; v: e, G) {" F1 \7 X' L- n
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    ; V2 y$ Y9 r$ L: ?6 ?
  24. CSpace:1001505B                 push    3
    % O: e4 e" d+ `: g( E) ^# X
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]; n* m3 m! ]! K" {, d
  26. CSpace:10015060                 push    eax- j8 l9 _, E$ d4 s
  27. CSpace:10015061                 call    sub_1003882A# Z9 j- u- \7 c8 O* w
  28. CSpace:10015066                 add     esp, 14h# A0 o3 p! t' w
  29. CSpace:10015069                 push    0               ; pUnkOuter6 l' v. N$ p9 N+ t4 v) |
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]' U" X4 d- X$ v* W# [0 W9 t3 ~
  31. CSpace:1001506E                 add     eax, 1DCh1 J3 l5 p* M! ~+ v' P
  32. CSpace:10015073                 push    eax             ; lplpDD% ?& y. A, f1 T
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    $ r6 d9 j+ W+ n4 P; v
  34. CSpace:10015077                 push    ecx             ; lpGUID; |7 `8 c* {- P
  35. CSpace:10015078                 call    j_DirectDrawCreate
    . G( z: v4 ?9 L: E1 {# P! }
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    + c% W0 r8 S2 Z1 S4 B; s& ~* w0 Y
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    5 o' _2 c: W- J  t& Y/ Q
  38. CSpace:10015084                 jz      short loc_1001509E" |; c* i% B2 o+ `
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"3 ^) P% l. z: P6 W* A* H
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    ' v# q! s' X' p% R. @4 W% Q
  41. CSpace:1001508E                 push    eax
    2 n9 z# B8 y- P1 \* [9 y
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    0 r! E$ ]6 _! g+ g- Q# f5 A
  43. CSpace:10015092                 call    sub_10038F3C
    2 {2 _6 i4 P+ l: T; A5 H" N
  44. CSpace:10015097                 xor     al, al
    + W& u1 g  Q/ P
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
! v4 y3 s+ {/ t! E# U6 ~0 g% h

5 n3 o" w+ j9 j# Q- k6 f! |( V9 ~- J4 X& i/ X- M0 Q9 S8 ~
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.) a* @" y* l% F, {1 G" g, y
记录到log_GL.out文件中。以下是摘录的一段。
0 e4 R  K& o" G" j! N( W我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
& e$ ~" e: M; v4 A以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?" q! v- Z; l# ~0 k  q4 u
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    - h, Q( m% V) K, z+ K7 G. n
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>& ]2 c3 h0 N  W
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>0 e3 h5 p/ F5 Q7 P7 P
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>+ w% ^) W8 _6 R6 t# W) P
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>7 N6 _8 q4 J' `  v) w( E
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>6 L' ?  H# u" |0 a/ k3 S  b
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>6 S, G9 J$ ], q
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ' ]& {% R( w* V5 A7 W
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    0 B$ _! k( y: v) b% Z
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>) C- b- G" s3 j' [: t; D! F% E5 Q# B
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    & Q! P5 U- }; H6 X. M
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>$ ]( R5 h1 U9 Z6 K5 v  S' h
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    4 i: I% e; O( _, p. b! I# K
  14. glClear, GLbitfield<256>
    ' E) O1 l8 q# }: i
  15. glShadeModel, GLenum<7424>
    1 N: _! k2 m) o0 \( ]
  16. glDisable, GLenum<2929>9 @: D( \% V7 }' S
  17. glDisable, GLenum<3008>
    ( r: z& B* O0 L4 M; F0 a1 p
  18. glDisable, GLenum<2896>
    # w( P6 M+ |) f
  19. glEnable, GLenum<3042>" h, B5 S8 z- h) \
  20. glDisable, GLenum<3553>; J# ^2 H1 s$ l9 n* x% y/ [: X+ ]
  21. glBindTexture, GLenum<3553>, GLuint<631>
      _. A: q% t1 n, {
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    & W( F- f- ]3 ?! D% x- b" n
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>7 [! v: Y0 f" N' B- M
  24. glClear, GLbitfield<16384>* [2 \/ o9 O: ?" y! p
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    1 ~! y# l- [9 H' U  b4 U% H+ B
  26. glEnable, GLenum<3553>; X" R$ E( `( w' Z
  27. glBegin, GLenum<7>
    0 S+ R. l* V- X7 n0 g& N$ y6 G
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>0 @* ?" {' ~& N+ S
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>5 F$ Z! d" d+ ?: x) Q# m' }+ q
  30. glVertex2i, GLint<0>, GLint<768>7 k; e& ]7 o& b. ]" d! G, c/ X
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>" ~6 X4 W4 W! A
  32. glVertex2i, GLint<1024>, GLint<768>
    ( D0 G! w6 }# U( |
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>& }3 b& |# Z$ x" V
  34. glVertex2i, GLint<1024>, GLint<-256>
    5 F! J3 U2 i0 J6 Q7 z. U8 Z
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>; n+ @/ L5 a6 c8 Y% i; m
  36. glVertex2i, GLint<0>, GLint<-256>
    8 x$ n: b6 d0 ^2 p- k3 v% p$ i2 R
  37. glEnd  K4 x0 F4 W1 j% {
  38. glShadeModel, GLenum<7424>+ v. w1 j8 \8 y7 ~  j# x
  39. glGetError
    ( Q; b( b: R+ h9 L$ A
  40. glDisable, GLenum<2929>
    9 O# G# c2 b4 C1 `' T+ u
  41. glGetError
    / R- ?6 _# B* ?% z- W
  42. glBlendFunc, GLenum<770>, GLenum<771>' ]' t. T) W7 l" C
  43. glGetError
    , ^+ B( H: T( r* f0 x/ _% b& X
  44. glEnable, GLenum<3042>
      ]# J# S- E# c; }9 w
  45. glGetError; e8 n9 [$ B" ?
  46. glDisable, GLenum<3553>
    : m+ w8 P& w0 @( u$ V' Y
  47. glGetError4 x) t! \1 b0 ?0 m2 V$ ~
  48. glBegin, GLenum<7>- d8 _9 F6 _  g0 {- K2 l- K
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    4 W! r% B6 D# V1 D9 d
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>" p2 j0 l; v8 y& h) I  U' A
  51. glVertex2i, GLint<0>, GLint<768>5 |' D3 p5 s/ q
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>' V# S# v/ p6 h5 L+ s
  53. glVertex2i, GLint<1024>, GLint<768>
    ! w& `, g5 p, q1 {/ a3 `
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    5 p4 j1 `5 E9 f4 l7 Q" m$ M( w
  55. glVertex2i, GLint<1024>, GLint<0>4 k. X. H- H$ k5 p
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>; Z" W6 Q) H' z$ ?& @( H: w
  57. glVertex2i, GLint<0>, GLint<0>; \# `9 V$ f9 L! G$ Y
  58. glEnd
    ; F: S# `: A% `5 r( c
  59. glGetError
    9 n& h0 A# g: C2 O
  60. glEnable, GLenum<3553>& G7 `6 q. g* Y6 Q
  61. glGetError
    9 o% ~, s, B7 v
  62. glFlush' t  }! j) C+ ^2 p) P. y
  63. wglSwapBuffers' r& b9 B, p0 `# |& _, J9 p' O
  64. ---------------------------  g* v. t9 O& {: H" L
  65. , HDC<-33484711>3 w% t6 e& D5 P( S+ L% ^5 L8 I0 i; s2 r
  66. wglGetPixelFormat, HDC<-33484711>
    , U8 G* D6 E% W
  67. glMatrixMode, GLenum<5889>
    6 o) E5 T0 S$ u
  68. glLoadIdentity7 a5 `, C3 e/ ^5 s
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    2 H  Q# u( J& k0 n8 m
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>( t  [  {( h4 l
  71. glMatrixMode, GLenum<5888>- \$ o/ [& [) ^/ V' F5 Q- A
  72. glLoadIdentity" |$ x5 J. Q/ F4 l/ r* @7 U
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>9 S- k) {* X4 X- p
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>3 \  z  P& K& D# \. _1 m6 H
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>; z9 [7 _) u  \0 x* C' g
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    " a" ^3 Z. P. s' w. S9 Y
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>4 r1 A9 `: c- i! [+ i- q$ B* h
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>2 d2 L- l. G0 y3 d
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    9 q' Q: h; h' i! d) u9 [' H- d
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    % Y; V1 ~( P- g5 ^4 }
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>1 d4 |$ |. a! S" P& m2 ~- n
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>- D/ ~) @3 Y$ O+ X2 B5 W1 @$ g
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>( h4 Q. `0 Q/ i2 A4 l
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    " b+ K; X9 E/ C; Z: z0 E
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>0 t! [: q3 f" _$ k8 N  i$ k
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    3 e( y& H/ o6 n$ z% N6 @6 e
  87. glClear, GLbitfield<256>2 d# A; n4 K) ~- G- {5 n
  88. glShadeModel, GLenum<7424>
    ; ]  z( ?+ X- c8 H/ X
  89. glDisable, GLenum<2929>
    # t. A. ~7 H0 c; ~  K, {/ I3 h6 c( x
  90. glDisable, GLenum<3008>  z3 P4 u6 d. }' D, v3 C8 O3 O4 m( `
  91. glDisable, GLenum<2896>
    2 r  I! l. x* [; h
  92. glEnable, GLenum<3042>
    " ^/ g1 ^# E4 x' w: L+ I: ~* S9 ~
  93. glDisable, GLenum<3553>
    * F) I, r1 }' @. W* A8 B& s4 I
  94. glBindTexture, GLenum<3553>, GLuint<631>7 O& J8 l6 W4 c4 o7 g$ K
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    ( X6 K4 \& K7 X4 W) L  D
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    + Q) D( y0 @9 R
  97. glClear, GLbitfield<16384>0 P" Q2 j7 V! b  q7 S# }- l. ~
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    4 Z! _/ k0 `* ~4 l4 G: l
  99. glEnable, GLenum<3553>
    % p$ Y* j1 _. o
  100. glBegin, GLenum<7>
    : \' \0 l' f6 G% O$ V
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    $ F. l+ U$ g8 V( V( F
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    * k$ R  P" w1 X( A
  103. glVertex2i, GLint<0>, GLint<768>, H7 ~8 `" a& i, J6 c
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>2 J: P1 q# p: B% d& W0 j/ Q6 r7 L
  105. glVertex2i, GLint<1024>, GLint<768>) l* G3 G# z" |# q; l. t7 q
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>, d/ N( h: v: D4 S' H1 x, z6 Y
  107. glVertex2i, GLint<1024>, GLint<-256>
    ( Z+ E! W! f5 a3 y' S
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>7 Z# c3 H5 x, u) K
  109. glVertex2i, GLint<0>, GLint<-256>0 v8 b; M- d, \/ ^
复制代码
6 Q9 _- H+ Y/ [

4 [4 _# n& c0 @  B8 j
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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