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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 8 t8 ]. ?+ u) }: V7 Z) [

7 y. l! B% z2 X0 b6 \0 o$ p本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
: B3 ^; c- \, B游戏应该实际只用了其中1个,暂时作下记录。/ K# p& `* i8 C+ o. X
6 g) s; I- A9 T# O1 t8 @# h! z
DirectDraw是由bin目录下的ddraw2d.dll来完成的。6 e6 u( l- @' P# D% |2 B1 K
以下是一处的初始化代码
9 L* p7 H5 G% u% U
  1. CSpace:10015015
    1 V0 j/ }) R1 m
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    * z5 w- f( B% V- Q0 Z0 X& X1 I
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    6 \5 w' V) b. y6 |
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]/ M/ D$ o# ~5 g& J5 {
  5. CSpace:1001501F                 mov     ecx, [eax+230h]4 U3 Q& N' Y0 u. I/ a# Y) h; I# ]
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]0 N5 O: E7 A( B0 y5 D  X
  7. CSpace:10015029                 test    edx, edx
    ( r+ K- R  w; H) l3 L
  8. CSpace:1001502B                 jnz     short loc_1001503C
    ; g/ B+ g+ J) W1 H
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]& H- a" x/ m2 `* n  B; y1 A# r
  10. CSpace:10015030                 mov     ecx, [eax+230h]* m# ^$ i$ ^3 Y( G. F
  11. CSpace:10015036                 add     ecx, 8- j% r  S9 O5 R# W! M7 }% M* X  v
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    8 b# A5 d- x' E# D( Y
  13. CSpace:1001503C- d0 S7 H  m; T- T
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    " k3 x9 K/ [2 o+ A" ~% S4 [: W
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    5 X; {: W9 u; N, G5 V
  16. CSpace:1001503F                 mov     ecx, [eax+230h]0 D5 _) {: W2 i, x) j
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]3 ?$ x! B1 X' `/ b) k1 i" d4 x. i
  18. CSpace:10015048                 push    edx
    ; U+ V/ D( w. u. O
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    + @% ]6 P5 _% t& C& I5 m
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    , |( }* k6 U/ e7 e) @7 n
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    : H: ~# M  Q* l5 i" _7 W/ N! S
  22. CSpace:10015055                 push    edx
    / I/ V% e9 _, J
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"# x3 e; z6 F5 h9 s
  24. CSpace:1001505B                 push    31 a, X( b% @5 K# e/ e; X1 S
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]& Y4 E- J- y; }, M
  26. CSpace:10015060                 push    eax
    ; a! w: r* E8 L. f
  27. CSpace:10015061                 call    sub_1003882A
    ! }  _1 W" T) t  ^0 ~" R+ O- H
  28. CSpace:10015066                 add     esp, 14h( i9 t' c2 l; Y/ M! Y
  29. CSpace:10015069                 push    0               ; pUnkOuter
    4 x2 G; X; k2 v$ [' J0 [/ @5 V# ^$ {  y
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    9 Z# l, u5 m- a
  31. CSpace:1001506E                 add     eax, 1DCh
      `* A7 N0 y" X
  32. CSpace:10015073                 push    eax             ; lplpDD
    - ?  e- M  Z$ O, q$ S- I$ O  R
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]3 p( g3 o2 G, `, t
  34. CSpace:10015077                 push    ecx             ; lpGUID9 |/ l  @/ i  q3 T' I
  35. CSpace:10015078                 call    j_DirectDrawCreate
    9 A  {8 u% Q5 n. _
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    $ i: J  h8 F8 ~( z
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    # q# j0 n2 }8 s, w4 Y7 s
  38. CSpace:10015084                 jz      short loc_1001509E
    3 C" d1 N4 k9 J" j, H
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    ; \& A/ ]/ L5 ?% _
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]4 ~' L- v9 r& z3 N( q" `* @
  41. CSpace:1001508E                 push    eax" C5 ]/ h) O* L3 ]8 X7 C7 t; S9 v& s- B
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]. l, v& L4 M4 a7 @7 ^( v2 A% i
  43. CSpace:10015092                 call    sub_10038F3C
    ! L1 Q' }4 \. G# u
  44. CSpace:10015097                 xor     al, al
    ! h: y: @; N. x# C8 ~+ |
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
" w3 V; j0 o4 P- n$ _( C7 F
; M$ ]/ Y/ {5 i8 y8 h% d9 Y
6 m! [7 Q- L. r' W4 t2 {
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
0 }0 p; S$ }' G2 T- s" q$ @记录到log_GL.out文件中。以下是摘录的一段。! s2 u$ h( D) E/ G# H4 `. W
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。1 V' f2 N6 H( P: \7 Z* a
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?& ]( k/ J4 s7 X% Y& ]! \, N" ~
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>% i) V- c% @8 R3 D+ T. _
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>! m* U* }2 U) d3 J
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    9 I& F" B; R/ R
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    7 c) F! I  H( l
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    : J+ p3 I+ B" @% `/ N9 U; }4 I
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    6 b0 V  R; B( Z9 N
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    ( I" a! {# b5 j# T- |  g4 I
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890># x4 i5 y# m* ]7 t
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    + |, o% o  p/ {% J  ~" S* q  z/ V" C
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167># u) A( ?3 P2 W6 I  |- m
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    6 g5 u$ Q+ o7 m0 ~8 Y! ~
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    & E3 J. f/ e0 u  r# s
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>% G; |, K; w7 {2 r) n; S; n
  14. glClear, GLbitfield<256>  l; l% z6 d, X) G) D* e
  15. glShadeModel, GLenum<7424>5 N$ d3 I  ^) @6 v" h
  16. glDisable, GLenum<2929>
    $ i; h$ J/ e! c* n
  17. glDisable, GLenum<3008>
    & Z1 t3 X0 A+ y6 w" l' U9 u
  18. glDisable, GLenum<2896>
    ' L+ }' I6 J  z9 u5 A
  19. glEnable, GLenum<3042>
    2 e. G  y9 U4 }" l7 W' ^) k
  20. glDisable, GLenum<3553>2 Z* O7 w) Y, o& ]* B6 z* o
  21. glBindTexture, GLenum<3553>, GLuint<631>
    . N6 r, F( p4 n
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>. P9 g3 `9 g* A3 i* j, v$ W9 F
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>$ Y6 H& C& f# v# Y
  24. glClear, GLbitfield<16384>7 w$ X( I" I0 L3 N) b( C0 t2 P
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    # f, H" o0 W! r7 M4 n
  26. glEnable, GLenum<3553>
    - l) ]" v9 p& X. \' h# I
  27. glBegin, GLenum<7>
    4 a4 p9 R* u8 p/ W! c
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    4 N1 S( z5 |4 j! J& X* u
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>, J/ F8 e* B: g& }2 ^
  30. glVertex2i, GLint<0>, GLint<768>- E, @/ ~; v3 Z6 s" Z' s1 T/ P
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>/ C4 R8 I+ a( n; q; H/ F+ z
  32. glVertex2i, GLint<1024>, GLint<768>
    " S% A$ C, w) G7 w+ G) C* U0 W0 T% G
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>; o  }: i0 M$ r$ `# a+ p4 D
  34. glVertex2i, GLint<1024>, GLint<-256>
    ) U. P5 [! O2 E* i  L
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>( h" I3 t$ `( J$ W9 B
  36. glVertex2i, GLint<0>, GLint<-256>
    : Q3 ?2 M; k7 u, h* Y
  37. glEnd  j9 H3 l$ C. y: z/ m
  38. glShadeModel, GLenum<7424>
      o. V- @2 X' g* Z. K" {+ \+ R/ P, a
  39. glGetError
    5 ~2 n: y; |+ [) a
  40. glDisable, GLenum<2929>% ^) s4 |1 u+ J2 V
  41. glGetError3 z3 Y9 a/ f" Y( D; W4 x
  42. glBlendFunc, GLenum<770>, GLenum<771>
    ( P1 o3 ?* j! L1 A
  43. glGetError
    ) n# o# y# {5 ~% X) }+ v  M3 I
  44. glEnable, GLenum<3042>% |; C$ [+ l$ S' m3 `- ^/ {
  45. glGetError
    6 _8 k1 A8 y+ j, a8 X# E
  46. glDisable, GLenum<3553>+ @1 A, @% C: A* \  o6 U
  47. glGetError
    ! z# y! b$ `% T
  48. glBegin, GLenum<7>
    2 U" W. m9 M9 v5 E6 o3 H
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>6 A6 B4 h5 N, E2 o
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>+ P" i( C& s4 [& }) z
  51. glVertex2i, GLint<0>, GLint<768>$ Y7 z/ C6 F7 |; M: o: Y# C- M( a
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    8 H8 i6 {+ \$ K: b; b
  53. glVertex2i, GLint<1024>, GLint<768>  U) u: n; d- x% n
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ; j# |. B7 S$ |, P0 H. n1 I
  55. glVertex2i, GLint<1024>, GLint<0>
    4 r) |" W" B0 L- p8 {. ?7 _
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    0 x. D+ S6 D( E+ u) k* b$ O; S3 u6 j
  57. glVertex2i, GLint<0>, GLint<0>
    % h; b% i6 x: m
  58. glEnd
    5 h& _* K) U5 G2 A/ K7 n
  59. glGetError/ b0 ^; T) l* t6 r- D
  60. glEnable, GLenum<3553>( h5 k5 f* V; m$ K4 P
  61. glGetError4 ]! x# h+ a0 ~( V- Z' B) S9 S
  62. glFlush
    1 Q" ~7 E/ c6 r- y
  63. wglSwapBuffers
    9 ^$ b9 u, P4 g2 D/ C& \
  64. ---------------------------  Q  }* J! b% R' j9 U2 Y3 k
  65. , HDC<-33484711>" M* t( j+ Y9 x. _; c% K
  66. wglGetPixelFormat, HDC<-33484711>
    - L2 n# r9 Z' R, {5 ~* R( ~
  67. glMatrixMode, GLenum<5889>
    - Q6 Q" W" t$ M8 Q8 B( y; K- |" G
  68. glLoadIdentity; y" d9 [  S, ^4 [
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    : {- {- U4 a! G
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>7 f$ y. @6 }* S+ N7 e3 J8 H& b
  71. glMatrixMode, GLenum<5888>! u- ^6 `; p+ n" `3 A4 ]% f. D9 y
  72. glLoadIdentity/ R5 g% o3 T) f
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    ) a( U* @& X: r4 {! k
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    & ]% O2 o0 L# t8 `+ x+ A
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    7 ^- P& Y0 y0 W  m$ B
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    3 V( m7 t9 j8 ]$ ?6 k" W
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    ( D7 r2 W6 i$ W! T
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    # N  V* D3 }& F# Z
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>8 D4 {! v. z9 a  m
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    ; M7 }4 n2 v3 K5 r% ~. j. L
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ! y. A) ~3 W3 @' N' Z+ X+ q
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    1 L* i$ h! r& P
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>7 K  G1 k1 ?0 G. l5 z. i
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    ) [7 P; I: V9 Q
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>$ p" D0 B: _1 |) F; j) v
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    1 }7 ~8 |. V+ p% r: F
  87. glClear, GLbitfield<256>
    2 _5 i4 ~9 s1 U1 Y
  88. glShadeModel, GLenum<7424>
    ; n' C* x+ l. `7 w
  89. glDisable, GLenum<2929>% B* f0 x9 L. @6 y& U. r# J
  90. glDisable, GLenum<3008>/ x0 p  s! q& k& O2 g4 i
  91. glDisable, GLenum<2896>
    1 j4 i. `1 z/ Z' U% [
  92. glEnable, GLenum<3042>" }. ^# m3 l/ |8 q, k
  93. glDisable, GLenum<3553># ?: o$ v) _% x
  94. glBindTexture, GLenum<3553>, GLuint<631>
    + R! a" D7 h/ E4 R8 N
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    - ]& s; `7 ]' ?: j9 D8 B# @
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    2 @: _! G5 T+ I* x" v- j6 r  c
  97. glClear, GLbitfield<16384>& B3 q5 w0 t  f, w, p. b
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>  {. J" O( Q7 Y# K
  99. glEnable, GLenum<3553>
    0 t3 B5 w" H5 B
  100. glBegin, GLenum<7>
      `: j& x; \' {$ ?8 f
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>; M3 T" b# d+ D1 ~
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    2 }1 D2 t9 W7 J: Z. [+ B" n
  103. glVertex2i, GLint<0>, GLint<768>2 a$ Q  b8 a5 V. G
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    ! ~8 V7 W$ z2 G; r& g: H6 U
  105. glVertex2i, GLint<1024>, GLint<768>
    % q* _2 g" `5 `. ~# X2 U
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>3 _: `/ b- T2 r; J) ]$ z  ]! U1 e* I
  107. glVertex2i, GLint<1024>, GLint<-256>% @1 H0 x( E9 m' ?$ G* k
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>+ n% w0 g$ r4 h  h
  109. glVertex2i, GLint<0>, GLint<-256>! P  b6 n% S. _* z
复制代码

. L' x/ v- h) t! Q, ?+ S. x8 ]  i
& U' h, z& F3 a2 `. f+ c
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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