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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 7 N% H8 l( N+ E' \
% }2 k: ~* [9 s
本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,: e  t) Y5 D0 z  C
游戏应该实际只用了其中1个,暂时作下记录。
* |5 A; x( s5 H, O1 |7 n6 v- r8 B9 D7 g" ?3 {1 _; k
DirectDraw是由bin目录下的ddraw2d.dll来完成的。' r2 M4 w  e9 ]4 {6 K
以下是一处的初始化代码
/ b6 v/ q: J9 X8 d: q- O. x& i' i
  1. CSpace:10015015, }$ i% T' e# A# I/ V: P
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j' q  @1 _: s5 ~$ n
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    8 x) P6 O8 k+ a: e! w' H
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]5 B4 X$ L; x( |% Z. t6 \" i
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    - U2 Y" _* g! |5 o; D* m$ w6 u$ K
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    1 L7 {' h$ |. J# ^6 a% z9 D# @$ Y
  7. CSpace:10015029                 test    edx, edx* j$ f8 m3 i: ]$ \- u1 C8 [
  8. CSpace:1001502B                 jnz     short loc_1001503C
    / k( t, B1 t! q0 D# s
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]9 _- ^! L5 Z; o6 F, t
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    . A4 f/ N  [& }+ H) d3 N
  11. CSpace:10015036                 add     ecx, 8
    $ O- o9 ~; F% @+ f# R/ _: e  d* |
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    3 l. R& W3 k6 m9 f
  13. CSpace:1001503C; m" e# F- z) x$ D* p
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j6 T+ Y: L6 ?4 B  R1 P! @: h, V
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]' B- F- U" Z1 Y1 a
  16. CSpace:1001503F                 mov     ecx, [eax+230h]* H' O: i. |  i
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]8 m( M, @/ X1 c4 e
  18. CSpace:10015048                 push    edx/ [2 O& A+ i! t7 l% E
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]/ x' E* {' c' P
  20. CSpace:1001504C                 mov     ecx, [eax+230h]6 d+ y* e! z! h3 ?% m
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    # v/ }5 e: y# X2 q
  22. CSpace:10015055                 push    edx
    ' J: N/ i5 |: Y- y4 k( G
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)": x- l! s8 p) D+ q
  24. CSpace:1001505B                 push    3
      v3 a; A5 o( @. _
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]" D9 T" n1 W. m# J  J, k9 Z
  26. CSpace:10015060                 push    eax$ ?2 Z9 x$ i0 R
  27. CSpace:10015061                 call    sub_1003882A4 A, a8 F, ~: t) D: U& x, {
  28. CSpace:10015066                 add     esp, 14h. D. ~" D1 k$ {
  29. CSpace:10015069                 push    0               ; pUnkOuter+ N6 X& V2 `: a+ Y9 O5 P
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]' ]! r) T" ?3 ~  _8 ~
  31. CSpace:1001506E                 add     eax, 1DCh
    0 g/ x/ H9 X/ f# B0 L3 Q$ j8 L
  32. CSpace:10015073                 push    eax             ; lplpDD: W3 P0 Y% K* {; U+ ?5 a
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    / g* Z+ [* e- ~) {+ ], z7 \& ?* v
  34. CSpace:10015077                 push    ecx             ; lpGUID
    ; R3 e" A: [0 X/ Q
  35. CSpace:10015078                 call    j_DirectDrawCreate) N- U6 @  ?5 N
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    + y( V! P! E+ w, l7 _
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    " _1 v1 N) Z" Q" L" P4 \# V
  38. CSpace:10015084                 jz      short loc_1001509E  e  {5 K# T/ A
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"% o+ ~  m, M: o' h( A
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]* u' ?1 P* m) p* r+ p- H1 O: s
  41. CSpace:1001508E                 push    eax$ ^' U& c) P7 h' R: {
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    , J, ?+ R8 j+ o" e7 ~7 L
  43. CSpace:10015092                 call    sub_10038F3C
    5 x  W$ b  N7 X2 d
  44. CSpace:10015097                 xor     al, al4 U0 z  y' @5 K$ D
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
! N7 }4 f' j, G
3 }" ^" n( G% a% t
9 V; R6 Z1 E) j' Z5 {$ }$ [0 g
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
( K' ?0 ]7 E' }& |( z记录到log_GL.out文件中。以下是摘录的一段。
" F( ]' q  p4 }4 h0 r我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
# \$ N4 a  w; f" s9 Y( C以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?1 q7 L  R: B( G/ r" _0 d
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>9 m4 u: n% v* l6 O8 Y; j) {2 q
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    ; O9 P  y: M8 u, q! M1 E! p
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768># \( l4 W! J3 r' [0 g
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    9 `3 Z. q. L( Y; }' j
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>4 T3 ]- c0 F6 T4 U/ A3 L) a# u
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    1 Y8 F9 j6 X5 v, }8 G
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    5 i6 c& ?# e; o/ i2 o
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    & t9 L  n  i, v% Q, i
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    % {1 n7 W6 K7 a8 K0 i
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    - t9 E, L- S7 J( n( F
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>$ h2 e2 {  v) w5 G9 f
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>0 D8 w6 w/ J- N% R( J) L( N
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    ; f) z; n4 B) W9 x, }
  14. glClear, GLbitfield<256>
    ! U3 t( A- {) W& q7 R7 z
  15. glShadeModel, GLenum<7424>
    8 L! i8 P7 s5 S* d9 T4 g4 m
  16. glDisable, GLenum<2929>
    - _0 b  E" ^1 q  ^, _; K; v! O
  17. glDisable, GLenum<3008>
    - L% T9 n3 C" A- B, @- \) n
  18. glDisable, GLenum<2896>( d# \; Y  ], W; M- |
  19. glEnable, GLenum<3042>
    + B7 q! t, D% @$ g1 l) a
  20. glDisable, GLenum<3553>
    " s' C7 \1 ~, ~, `4 v
  21. glBindTexture, GLenum<3553>, GLuint<631>  f$ ?+ n! [, H, l+ m  a
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    6 C4 x+ y' E9 x. e5 L: Y/ q
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>' l* N& s5 f. F9 L" m; h" R
  24. glClear, GLbitfield<16384>
    % a) ~4 X: `' {& k( n! ~
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    . Q" d4 e+ T1 i; X  C
  26. glEnable, GLenum<3553>
    ' ^9 J. Q1 B, L  z5 q: p6 t
  27. glBegin, GLenum<7>3 \/ j3 S' x" k3 ~  m' M1 o$ L0 r) r
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>9 E3 }/ A( l4 J
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>  R9 _4 ~' F$ e/ k
  30. glVertex2i, GLint<0>, GLint<768>
    - b, {1 r' a3 q( Q% ]* ]7 i! Y
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>6 O& B$ a. ]$ I" R0 T+ I. R
  32. glVertex2i, GLint<1024>, GLint<768>5 o$ `. ~$ J+ F% D5 p# V
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    7 b9 V3 I% u! K+ |1 c
  34. glVertex2i, GLint<1024>, GLint<-256>
    5 ]4 j' v6 [$ S( X: h1 O" n
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    - A5 Z5 q# C' @4 T, v
  36. glVertex2i, GLint<0>, GLint<-256>8 |4 P7 x/ q" x4 |
  37. glEnd9 c8 ~+ ~6 b; V+ f5 X" L/ n
  38. glShadeModel, GLenum<7424>3 r3 q1 J1 a' X1 `9 B0 `3 g
  39. glGetError' f5 d, x2 p9 W! w4 h9 R
  40. glDisable, GLenum<2929>
    2 J" g/ a. Q: s/ x! f- Z5 ]3 J
  41. glGetError/ U% R, r4 [4 E- r' I% U* s- _5 N/ A
  42. glBlendFunc, GLenum<770>, GLenum<771>
    ' g3 O" k% M1 l4 S4 r3 P6 g# ~* {3 i: m
  43. glGetError! e% Y% L( ]9 X( S, |
  44. glEnable, GLenum<3042>
    3 Y, t' Y" {( D: `! }2 A6 x
  45. glGetError3 W/ e6 _0 I# a# k9 x: J
  46. glDisable, GLenum<3553>' O0 {" i9 D) O0 j) {4 E
  47. glGetError
    , W, ~( X3 ~! U
  48. glBegin, GLenum<7>2 e1 e& M. P6 Z1 L* \* |% k6 \
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>  L' C# W2 \/ A3 L7 i2 |( P
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>; x" }1 G( s' T0 c3 u5 i& @& Q
  51. glVertex2i, GLint<0>, GLint<768>
    ) _) J& p! i9 K! x6 H  m$ b
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    6 s" e, _" t; |' S4 Z7 f
  53. glVertex2i, GLint<1024>, GLint<768>! y* x% I# Z! J+ N
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ' B+ ?7 `( F- V- p2 K2 T
  55. glVertex2i, GLint<1024>, GLint<0>
    0 F; E/ q: d, O4 g% N. \: c/ z
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>) h/ u4 m6 G5 c1 j3 B
  57. glVertex2i, GLint<0>, GLint<0>
    + ]: b/ d3 U6 e( v8 F
  58. glEnd
    " i" S- \& W" x
  59. glGetError
    5 P% q& o! L% y1 E0 L
  60. glEnable, GLenum<3553>9 X+ y3 o! ~8 f9 S. c" H
  61. glGetError" M) |4 B" y2 @+ z' v' D6 j( L! |
  62. glFlush+ C4 d( _+ H$ M2 x
  63. wglSwapBuffers. Z3 Z4 u2 `; T/ B1 g) x
  64. ---------------------------9 s" W) R$ n5 Z4 k) [5 w$ W$ N
  65. , HDC<-33484711>5 R* G+ H1 z6 i: S
  66. wglGetPixelFormat, HDC<-33484711>
    ) Z& U  |( p0 L
  67. glMatrixMode, GLenum<5889>- D+ y# p4 |4 l; T' a* R( U: S# o
  68. glLoadIdentity
    ( C7 s2 a& a1 z
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    $ T- ?; A- Q/ w" W+ {
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    , k, Q* A5 O1 }/ e5 O
  71. glMatrixMode, GLenum<5888>
    . y  M* F2 n9 R" Z2 ?! d
  72. glLoadIdentity* @# P) o' w0 [1 l7 ]5 d3 ]
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    * P$ P$ z, h; Q0 M
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    5 B2 O) Z  K, `2 C1 C9 p. F
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    / q. v- _& }; \1 R- {+ _  G+ w
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    7 [8 u: e% B$ z5 b% D
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    - r' e" T, W8 {2 X0 W5 Q( F1 B
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768># E/ ]1 j# L0 Z1 S4 B
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    6 F7 y) f3 ]5 l+ }  R5 k
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    - l( P" n- d7 w$ ]+ k2 S
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    7 \- x$ C% T' [2 b' d5 }" `5 Y
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>5 @. g  k/ G5 C3 P6 Z
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>7 l- y( ?" q2 T+ Q; s
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    - _$ Y1 }6 l) G9 |3 N6 ^
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    3 |: u& C0 y. M# Y7 k2 _
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>+ y8 Y2 F. {$ C" s
  87. glClear, GLbitfield<256>3 [! O8 p3 O" y- u
  88. glShadeModel, GLenum<7424>
    ) H& ~3 {! R. b* a& E; {
  89. glDisable, GLenum<2929>
    + W. b0 a: {; Q; c% R. }( A
  90. glDisable, GLenum<3008>
    5 W+ ^) ~, \: c; ]2 i9 A
  91. glDisable, GLenum<2896>
    6 C+ {# Y- Y" r  l- I- [) C
  92. glEnable, GLenum<3042>' P$ h& \/ z! u' P! O8 X$ r& P" ?7 N
  93. glDisable, GLenum<3553>
    + g4 V( o8 o) X" M5 h" A- [
  94. glBindTexture, GLenum<3553>, GLuint<631>2 ]* ~  A7 W( L" T# i
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    2 r" C7 |: N0 T  s8 Q4 X
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    8 Y7 M6 b; _% ~
  97. glClear, GLbitfield<16384>7 X# v+ `/ }) n, C9 U5 u2 h
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>( J/ P4 z+ v6 z) b0 f. h
  99. glEnable, GLenum<3553>
    " c: r" G$ q+ T
  100. glBegin, GLenum<7>
    7 n% N2 x1 s0 C
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>: T( j% a# ]- V% R9 {
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>( t, b7 G  O; y) D8 }( n$ A1 g8 ^
  103. glVertex2i, GLint<0>, GLint<768>" c9 ?, L' R' u1 ^+ \
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    . X' l; D% ~4 L! j/ V7 d- ^' k( G; S
  105. glVertex2i, GLint<1024>, GLint<768>
    - c+ `/ _* t8 m9 r; {
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>8 H  W1 R/ c+ e9 H$ m5 e  k5 o4 Z" @( h
  107. glVertex2i, GLint<1024>, GLint<-256>
    / k1 {$ F/ f( @- ~4 h, Y2 _
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>8 S# q; s/ q) N* J, |6 P, M8 c7 r
  109. glVertex2i, GLint<0>, GLint<-256>, e3 g0 X" O8 g; N6 W
复制代码
0 \# j; V0 g) z9 [4 H

4 @9 W8 {+ y+ x; k" E- H/ S( z
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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