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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 ; F2 L: [: S' m0 b- F
# @- S- N' t5 v( Q1 E  x" Z; l
本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
5 }) [. N& u4 @2 O3 r% H# t游戏应该实际只用了其中1个,暂时作下记录。
! p( A7 D6 R. H/ B: x
! m& }7 ^: p+ I- r* `DirectDraw是由bin目录下的ddraw2d.dll来完成的。5 x& D4 \: G  ~( g7 E1 ?
以下是一处的初始化代码$ h; ~, V5 H6 I5 y9 ^$ G# @
  1. CSpace:10015015
    + y0 x9 H  _6 u
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    % ^; K# X1 j+ N3 c, G1 b5 x
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    8 |& r, K3 g9 m6 J  @3 R
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]4 ?0 ~) j& `% X+ J) d; n8 ^# g
  5. CSpace:1001501F                 mov     ecx, [eax+230h]0 K& f5 S$ q9 @/ {+ i+ v9 e8 A
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    7 K* {$ u" C; T" [7 W  X" ^1 z
  7. CSpace:10015029                 test    edx, edx
    * N" t, l1 D+ k# i5 k/ w* w
  8. CSpace:1001502B                 jnz     short loc_1001503C, ^9 h2 ^# v/ d
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]  `3 }* v1 @  E! n  I; a+ z6 f; i
  10. CSpace:10015030                 mov     ecx, [eax+230h]2 y7 C6 M6 v! w' L5 x
  11. CSpace:10015036                 add     ecx, 8' _2 l5 O- d9 f0 N; w* t
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    3 Y1 p$ w! n6 }( f3 r; W0 R" Y3 Y
  13. CSpace:1001503C, {2 @+ ]% T% k5 b! e; [4 D
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j8 K$ S* G/ [0 ?5 V" P3 N
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]3 Z* T. G! M: L: D
  16. CSpace:1001503F                 mov     ecx, [eax+230h]7 s2 x- u4 d. U  N
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]. _( _# D& T: @4 E6 P+ x' l
  18. CSpace:10015048                 push    edx- o8 ]5 m3 S  x5 i( [! H5 S
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]% T9 h# _0 |- R' C; n
  20. CSpace:1001504C                 mov     ecx, [eax+230h]" r/ W4 l& b. E/ p# F# }. u7 w3 j
  21. CSpace:10015052                 mov     edx, [ecx+20h]% y% g. ~3 R9 J
  22. CSpace:10015055                 push    edx! X) Q1 b0 n& ^2 R. S
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    * n' B* o# j9 `) D' T; p. r
  24. CSpace:1001505B                 push    3
    . C$ y# O8 n1 ]! ?9 H, y) w
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]- h7 ?; D# I1 r# l8 I
  26. CSpace:10015060                 push    eax
    6 R+ I% y/ V0 H. X( ^4 @! x4 A
  27. CSpace:10015061                 call    sub_1003882A
    8 H, v/ E- _, {3 e
  28. CSpace:10015066                 add     esp, 14h
    / T3 U+ U+ ], W8 r) Q
  29. CSpace:10015069                 push    0               ; pUnkOuter9 `7 A! Q; W7 M, b  Y) K+ p
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    $ p* y& Q2 D, p+ W2 j1 }7 k& O
  31. CSpace:1001506E                 add     eax, 1DCh
      Y$ f  _; m/ S+ r+ T8 `: b
  32. CSpace:10015073                 push    eax             ; lplpDD
    ; m& V* p. u6 ?& c: \% s7 S
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    2 g# A" r( [+ t  P5 o) N
  34. CSpace:10015077                 push    ecx             ; lpGUID0 x  }2 h4 O8 ~5 D  {
  35. CSpace:10015078                 call    j_DirectDrawCreate* p3 D; f2 y7 I! L5 |! |
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    5 l! f* v! S4 ~% |- d4 y3 [: T
  37. CSpace:10015080                 cmp     [ebp+var_14], 0% c( P2 B. [2 M; J' F7 s3 ]
  38. CSpace:10015084                 jz      short loc_1001509E  G1 [+ A% I1 K$ d
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"5 y" ~, X. n4 [( t4 U$ k8 d# s
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]; x0 M7 r9 q, o- ^& [
  41. CSpace:1001508E                 push    eax1 m* Q5 m3 B% M* H8 F. l
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]: q" F' J6 Y7 i# l. V
  43. CSpace:10015092                 call    sub_10038F3C, `: d- p& a2 N4 R7 }
  44. CSpace:10015097                 xor     al, al& A* @/ J- ]+ h9 _
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
. s# ]! ^" m4 R: J7 w3 s6 h' d3 p6 ]
/ r* q% Q3 z" s& _' R8 v

9 B- l9 \6 ~4 G我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
! \- n" b2 {5 [# j记录到log_GL.out文件中。以下是摘录的一段。0 n9 [& u4 v+ P) b& L
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
! I1 f* B4 r$ `) E" h以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?3 H2 B+ K$ o6 `9 W" f% c
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ) u  U& h% ?1 L7 Q7 y
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>$ {: O! d! s5 y; g5 ~) G. c4 R
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>" y0 c& {' Z3 U0 s
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>; M$ x0 H: R% ~6 ^( v
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>' c5 P& q0 r4 z7 e
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    8 m2 \- i; U# B
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>) L0 c, ?" I7 Q) h
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>- R7 s6 p# s4 P  f. \1 R
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>9 W- T. k0 ^0 d) h
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    8 |9 V$ v" A, d. m% t' X* S5 T0 R+ \
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>" {; W8 p2 k9 Z" p
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>7 Z# W7 j9 j7 o4 s4 j0 a
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>5 ?3 E% X7 A5 r/ W4 o3 d
  14. glClear, GLbitfield<256>0 E- r. Q, M! D% l
  15. glShadeModel, GLenum<7424>; \7 n% |1 v+ F
  16. glDisable, GLenum<2929>3 M( y" |# ~+ g# @/ g+ D# U7 p
  17. glDisable, GLenum<3008>; \8 K* R, ?8 l' k( [
  18. glDisable, GLenum<2896>
    & i# w0 {; {, w
  19. glEnable, GLenum<3042>+ h  C: l1 Y7 ]) G
  20. glDisable, GLenum<3553>
    + P5 x& i9 L9 M' o
  21. glBindTexture, GLenum<3553>, GLuint<631>& ]- o' B- B. g- y$ s3 J
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>1 O* g" D- O* B9 @
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>! F" o6 a+ {  G+ }
  24. glClear, GLbitfield<16384>0 k. `6 P) M2 W" x3 [2 X
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>1 R0 I/ v2 D) o' M" k9 F% D
  26. glEnable, GLenum<3553>
    ( L: G/ g+ }: @
  27. glBegin, GLenum<7>' v& c, R, W; p& N
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    " V8 ?1 X$ V& _5 f6 f2 @3 F
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>0 I# F7 J1 }3 I" B/ B
  30. glVertex2i, GLint<0>, GLint<768>1 q8 k- t7 U+ u/ u$ Q  s
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    + d( h# P$ Y& U2 D; y5 S
  32. glVertex2i, GLint<1024>, GLint<768>
    9 j/ C/ L: m  X/ z- J5 ]- Q
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>7 e; u0 P, ^" M+ [# O  W  L% k
  34. glVertex2i, GLint<1024>, GLint<-256>
    " E- }- P! q8 ?; d- ~0 Q
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>1 D% s1 h/ m9 y, O5 h' j# e9 a6 R
  36. glVertex2i, GLint<0>, GLint<-256>
    8 L" ?( N' j/ v4 R* z
  37. glEnd
    ) y/ S5 J2 n# c% y% O+ w  H
  38. glShadeModel, GLenum<7424>6 q. u( y  A1 p+ H/ d, W! k$ A
  39. glGetError
    & B7 V5 B2 s8 c1 G+ G" j
  40. glDisable, GLenum<2929>  ]6 j3 m$ `) b. o
  41. glGetError
    ( }0 Q0 \' h1 }4 P
  42. glBlendFunc, GLenum<770>, GLenum<771>
    & l5 k, F# P) h, d3 X0 P0 d: B
  43. glGetError0 D. t' o/ O/ \
  44. glEnable, GLenum<3042>! [& z# \- _: a! C2 |; b, m
  45. glGetError
    ! b. r! X, s7 o" F; }+ q7 O, P
  46. glDisable, GLenum<3553>7 w% x- E, z3 W
  47. glGetError
    ; }$ ^8 E3 z+ T, s& T: x
  48. glBegin, GLenum<7>
    + l5 A( {9 X8 `
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    , H; z5 ~9 T' e2 ~4 c
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>9 B- k/ ~) v* N$ m# z7 z: s7 |
  51. glVertex2i, GLint<0>, GLint<768>. H4 }$ c; L/ ?6 L; ?
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    5 d0 p+ K$ N8 t  J
  53. glVertex2i, GLint<1024>, GLint<768>3 G- F  L+ s2 l& e" a
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    7 G  ^4 Y/ B/ n' c. o+ ~
  55. glVertex2i, GLint<1024>, GLint<0>0 @6 `) U# @6 a2 @5 o" b
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>3 k* p' y+ d9 `  y
  57. glVertex2i, GLint<0>, GLint<0>4 B7 d; ~0 h7 c; ]
  58. glEnd6 d7 ^) Y+ `" C  O% q9 P, s
  59. glGetError
    ! }  f1 @, A/ a- f( u& a: ^
  60. glEnable, GLenum<3553>4 I. i3 c4 E9 r2 B" C0 Z0 H7 t# Z
  61. glGetError
    * ]4 F+ q* ^4 O# N
  62. glFlush
    ) v6 T! q' e0 i% S' j
  63. wglSwapBuffers; t- y4 x2 I/ B2 K6 }
  64. ---------------------------
    , m/ m# ]8 ]% J0 b( U" H
  65. , HDC<-33484711>
    ) |  r5 L7 e8 x. V( y$ A5 E
  66. wglGetPixelFormat, HDC<-33484711>
    $ w# a. @' J4 _0 y
  67. glMatrixMode, GLenum<5889>
    2 B! z" O9 ?/ v( p
  68. glLoadIdentity8 b+ E( e3 o( t- p- o
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>0 o3 b: F/ T9 \/ I
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>  A# `5 ~; U6 C) t/ |
  71. glMatrixMode, GLenum<5888>$ e! H* M+ q, x/ G
  72. glLoadIdentity; Z1 y7 x$ G$ k, [% u
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    . ^3 n% {2 f- ]1 F+ C
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ! i( o! o" C3 [1 k, V7 G, h0 l( z
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    # I7 l9 K# i$ n2 ]1 c
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>2 @& J" ]  h( I2 v
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>0 s  T/ L  w: u- S' w# [0 `2 |% B
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>" l7 V% ~# G9 d3 y; X
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    5 m' W( E( S0 }9 @
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>0 u" Y/ v+ E3 E, j! W
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    1 x  f9 e9 |0 @: ]) u; h
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    ( |: a( s: K2 T  p8 }/ U  ]
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    0 ]( p7 K+ m" c; |, ]  J, z& Y9 e
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>: b0 u9 V$ l% _
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>& j/ n1 o' O: z. j
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    4 q8 ?( a: f8 h0 t
  87. glClear, GLbitfield<256>
    ! \/ Y3 s* ~0 ^7 j! ^$ P# g
  88. glShadeModel, GLenum<7424>
    5 B% V* y+ F+ ]+ B, b! b
  89. glDisable, GLenum<2929>/ M( F& W! f8 o. k; n
  90. glDisable, GLenum<3008>' \8 X, Y, R* {" m. i
  91. glDisable, GLenum<2896>) \# j, b/ R( m: n, P- v
  92. glEnable, GLenum<3042>
    # g& ~9 F" |. b, q0 O
  93. glDisable, GLenum<3553>+ R5 w7 r1 e7 D. Q( {( L9 k
  94. glBindTexture, GLenum<3553>, GLuint<631>
    ! W5 ^+ U7 @  V  s8 r
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    # U& X% J% d1 R$ a) C& |
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>/ @2 R0 ?9 J# B+ n
  97. glClear, GLbitfield<16384>
    9 o' o# O4 i0 ^. e) H8 N; t
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>% E3 }! l8 U6 U
  99. glEnable, GLenum<3553>
    ! j" i& R/ H- d1 g/ y
  100. glBegin, GLenum<7>
    1 O# A6 |8 [1 B- J
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    & K; ?7 S+ n6 ~$ E3 h
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    % \+ Z$ m  ]/ [: v
  103. glVertex2i, GLint<0>, GLint<768>
    # k/ Q4 |) D& Z1 ^# \2 r
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    2 S5 r/ F' ~  {; x6 V
  105. glVertex2i, GLint<1024>, GLint<768>6 ^; G0 }( D+ }- [3 L  K9 B- o
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216># D! x# I* H" X$ Y) j1 o8 x. }  g9 p
  107. glVertex2i, GLint<1024>, GLint<-256>) s/ l/ j' O# W0 F7 ]4 T
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    # ~& W! Z! O; z: N6 P5 N2 O6 \% q
  109. glVertex2i, GLint<0>, GLint<-256>. v5 Z. `7 o- b- U' @
复制代码

" {+ U1 }- B7 A3 S: J0 a. Y3 s7 y1 f( Z3 p+ _2 ^
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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