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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 # C" L2 b* |: x3 A* l# O; v

+ }1 H; {' Q0 w0 A+ |0 I本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
6 ]% E: c( P3 c. c5 {2 K游戏应该实际只用了其中1个,暂时作下记录。6 v+ P& e, s  n) o. `& [$ G

0 Z& \" g6 J4 b" V' qDirectDraw是由bin目录下的ddraw2d.dll来完成的。
" }. R. j- a6 Q1 `" ~9 ^+ B以下是一处的初始化代码: l; y: n1 Y4 k9 ^
  1. CSpace:10015015$ |9 x; |* N/ D" z5 ~' [( T
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j/ G! I8 r: T: e+ G- y+ c6 v
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    9 a, e( e# i9 W  S1 P
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]* y4 h. w* X9 m  s
  5. CSpace:1001501F                 mov     ecx, [eax+230h]6 \% C1 D  v- q7 M0 [' }
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    3 y8 u% P% R' K* `& Q* X
  7. CSpace:10015029                 test    edx, edx  W. b$ C' U5 j. y* A1 H* K
  8. CSpace:1001502B                 jnz     short loc_1001503C! x6 r$ s! S& _* v  d6 B
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
      ]/ z$ j2 o+ Q# Y9 u! @6 Y
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    6 w* Z. Z$ Z! U+ r
  11. CSpace:10015036                 add     ecx, 8
    % N" b8 h, v6 y7 L+ M: Z& F
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx% P. y+ w) Z$ @
  13. CSpace:1001503C( K4 `$ k/ d, F) G; _7 C, K
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    ( N7 v. j; S* v" d1 V" x
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    / c5 G4 G  }5 G! R1 {
  16. CSpace:1001503F                 mov     ecx, [eax+230h]4 O1 v6 G# e$ L( Z2 C( h
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]* \$ L/ D6 K! j5 B
  18. CSpace:10015048                 push    edx
    , g" p& n* S, D1 r. x* F1 t
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    9 u7 v# b. X3 V( s
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    ; i: F$ f& D. G8 f; q: [) F4 w
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    . `# r  R0 x6 ^" s
  22. CSpace:10015055                 push    edx
    9 P5 ]1 o2 `: T& A
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"* p2 D7 ^+ v: w( Z6 p0 q
  24. CSpace:1001505B                 push    3" ]$ P- s2 h- a; P& g2 L
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    6 J# B. F" j/ c+ J7 u+ G8 Q, p
  26. CSpace:10015060                 push    eax
    $ ?( P" _/ b! W) B: l9 b
  27. CSpace:10015061                 call    sub_1003882A
    $ M+ R9 u) a4 V
  28. CSpace:10015066                 add     esp, 14h: W7 P4 o$ V2 X* |. Y& |, R
  29. CSpace:10015069                 push    0               ; pUnkOuter9 n/ K  }+ ]0 b' y- P: M
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    ( |# ^& `- o% w1 t" ~
  31. CSpace:1001506E                 add     eax, 1DCh/ B+ W6 L0 B" a% g3 G# U. a+ }% P
  32. CSpace:10015073                 push    eax             ; lplpDD
    ! e  {/ R4 z- y' @: i# x. \
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    , z0 \+ e/ P% u% M; y: B7 H
  34. CSpace:10015077                 push    ecx             ; lpGUID
    ) C2 h0 A5 E1 `: [+ I9 r0 e1 @  _. |
  35. CSpace:10015078                 call    j_DirectDrawCreate& u% {9 q. W  D6 s4 K. L4 ?
  36. CSpace:1001507D                 mov     [ebp+var_14], eax3 C9 s( T8 J: Q7 D1 [& G
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    - F  j# F3 R8 R" S* G
  38. CSpace:10015084                 jz      short loc_1001509E
    ) p" l" ], ~3 Y' v- Y7 n& P( r' c) H
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"% c/ ^7 r3 R2 S6 X
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    0 ]( p9 g  j$ W. S
  41. CSpace:1001508E                 push    eax! [9 Q1 e" E; s7 v
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    " \3 ^( @5 }. i- v+ _# F* e
  43. CSpace:10015092                 call    sub_10038F3C
    - Q  u; {* s9 [1 v9 ~4 N1 e6 W# M
  44. CSpace:10015097                 xor     al, al
    / |) [$ C0 _+ r% A: v% e
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

& v1 p% F/ e( c2 [4 E6 r4 o! v% ~/ A- D+ b6 w, K

/ I7 q! U/ U# u$ J+ h# `" `; \我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
+ n& y' D6 D) c3 _; N( z记录到log_GL.out文件中。以下是摘录的一段。
9 t7 A+ u( u4 B9 U1 Z1 @, F我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
4 z5 ?2 |# m/ g# t1 M, M以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
; k9 _4 {/ L  }& u0 R7 V
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>3 q. T6 U* x8 _! g+ ^. U- c7 t
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    5 @- U6 E7 O1 u3 V
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>2 T2 l7 R+ @5 h. V- U8 b
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    1 x9 V: X8 O* q& o4 X3 k
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>$ B; B9 P4 V" Y% u
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    : \% `' y8 Z- `% G9 M
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    0 L7 B* |, a1 @% |4 q6 @% `2 D# |* d
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>3 U# b1 l7 ]- L* }7 T
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    2 C! B9 f9 {9 [5 n
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    ! B# l5 q; l9 h+ [0 W
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>$ V  m3 w; j' s% r. n, N5 [
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    8 ?& g. J0 w+ T) H* D1 T3 c
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>) {# K( u# X1 z  q- B, r3 f1 @( f
  14. glClear, GLbitfield<256>9 _7 h- o/ |' u6 j; B4 H' w
  15. glShadeModel, GLenum<7424>
    7 I4 F  V2 h) |0 x9 S
  16. glDisable, GLenum<2929>/ g" U% O( `- N0 q% O  a
  17. glDisable, GLenum<3008>  `: Z, o6 Q1 `& K. |* `2 i8 J3 g
  18. glDisable, GLenum<2896>
    / p% e0 k* Y$ a8 T+ {
  19. glEnable, GLenum<3042>" b7 T0 v4 ~$ D' \, d9 n; J
  20. glDisable, GLenum<3553>
    6 h5 H+ J% e: |. W* Z2 l. `3 O
  21. glBindTexture, GLenum<3553>, GLuint<631>
    . A8 M, Z, x' H7 c
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>7 J6 v5 }' R* f9 t# |+ l
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ' g7 l/ y! {6 ]6 w: L" Y- f
  24. glClear, GLbitfield<16384>- V& n* \6 J/ @5 p6 G8 @: e
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>  P7 l3 }8 a5 q" [' e2 m) A% s* Z8 ]; t
  26. glEnable, GLenum<3553>
    " }% A& B. G5 ~3 u
  27. glBegin, GLenum<7>
    * e8 m1 V6 P/ E/ ?" ~' C) t
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    $ T- C# F% h: z; x3 ]( ^8 E
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    & z# p" `! `9 a8 T) @
  30. glVertex2i, GLint<0>, GLint<768>! y: `7 t3 S7 l
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    / c  R. o( s7 K! o- o3 x. \
  32. glVertex2i, GLint<1024>, GLint<768>
    9 W" F# B7 z2 x4 A9 O
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    # v. |# _/ v* u6 w# `- |
  34. glVertex2i, GLint<1024>, GLint<-256>' `* B9 `0 Y& k7 R) a" I
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>$ B) p! t$ w" [& @2 v+ S
  36. glVertex2i, GLint<0>, GLint<-256>' ~+ l4 O& h1 [0 \$ K
  37. glEnd1 y4 N/ P6 [  q. P* {- o) c9 |
  38. glShadeModel, GLenum<7424>& c: X: a: S+ V7 X
  39. glGetError  N/ l  a5 s& g# A& N4 Q/ S! j; Q# i* t7 l  q
  40. glDisable, GLenum<2929>
    $ {% l1 t0 P# Q1 j, A
  41. glGetError
    & k8 H* g: e+ A, o3 R9 N5 k5 Z2 }
  42. glBlendFunc, GLenum<770>, GLenum<771>
    ; M! i2 s7 O/ Z! J9 l
  43. glGetError
    ' w! R: m" t$ ~- d3 \
  44. glEnable, GLenum<3042>7 w  D1 R' d$ M# N/ a& I5 \
  45. glGetError/ B6 j5 C' ^. G- u
  46. glDisable, GLenum<3553>
    6 d* A3 _7 [* l3 t8 h# i- R
  47. glGetError* [. E' f6 w1 N+ B0 T
  48. glBegin, GLenum<7>! U, {7 B; p; D; A0 ~2 D
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>4 ~! P/ m9 ^# h* j* l$ d
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    % z, r; D( m/ p% J* t- r
  51. glVertex2i, GLint<0>, GLint<768>
    $ ?+ x) I& S& C4 @4 Y: D' O
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>( Y+ P2 |' C, K' A7 f6 A3 d1 H5 U
  53. glVertex2i, GLint<1024>, GLint<768>
    8 ?( W. F+ |4 H+ R" F2 T
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    2 z  Z5 R# E. A- p$ C5 W- Q- Q
  55. glVertex2i, GLint<1024>, GLint<0>
      e) w( k) r" b$ c
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>7 X7 a1 a- `, M' I* Q; x; [% B
  57. glVertex2i, GLint<0>, GLint<0>
    8 S+ _* h$ Z( k
  58. glEnd  X4 I% ?" L9 o( u
  59. glGetError
    ( R* P! u& B& W" {3 n8 O1 o4 Y; J+ u: w
  60. glEnable, GLenum<3553>
    0 W0 S5 f6 Q- G" T3 i# w. F) h
  61. glGetError: q! ]1 {0 y7 e
  62. glFlush  v" t& V' l. `& A' o
  63. wglSwapBuffers
    * d$ s7 {3 M9 ]
  64. ---------------------------
    : ]0 f, f4 N1 ^" V1 s: z
  65. , HDC<-33484711>1 B. ^( e* l' Q
  66. wglGetPixelFormat, HDC<-33484711>! Y0 ^2 a; z, h7 N. R# S
  67. glMatrixMode, GLenum<5889>" P+ x: j# m2 A, W
  68. glLoadIdentity
    - h" c9 U7 x7 A9 ]; n3 V
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>: W9 o8 |* {+ a+ @
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>' @6 K) w9 d, L( s9 H/ c# q' R) Z! O
  71. glMatrixMode, GLenum<5888>0 }" o( ?. C# D; i
  72. glLoadIdentity% X$ b" ?. y( q8 B
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>7 P( e) ~4 P( f0 t% D$ y+ A
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>! `3 r0 O: \3 `' h
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>; g' ?# N0 I  f8 f2 \
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>: Z0 N0 t6 ?; n" a. ]# J) z/ d9 q
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    $ A0 G, k  O% G3 Z/ C2 p
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    , W1 D  H8 b: D# n# E- f6 Y; {+ f
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    6 h0 L1 e4 R5 _7 G$ M
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    6 y( ~/ \9 T" t+ |
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    ' X- ?6 T$ U5 k+ q+ V+ }/ W
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>! E' A0 V4 I0 b- n) f' j3 j6 {* N
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>4 x5 _: Q; C! m8 A3 N9 i% D
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    % b3 x4 I4 Y: Q: X; w
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>5 r: ~) \+ h) C& ?
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    / k( j- H5 f9 p- F' _6 Q
  87. glClear, GLbitfield<256>! f0 J- R% L& j$ i' L# |. M: z
  88. glShadeModel, GLenum<7424>
    7 Z' R8 T* o& _1 v
  89. glDisable, GLenum<2929>
    " b  G9 i" _/ G; Q. F
  90. glDisable, GLenum<3008>
    ' I7 p4 i' g- r3 n7 l* ]
  91. glDisable, GLenum<2896># o' t% [, J, k9 l$ u  k8 D4 z: w+ l
  92. glEnable, GLenum<3042>5 G3 r& t1 r1 f, ?, V6 J
  93. glDisable, GLenum<3553>' _9 O* j* `* d" e- s( U2 R
  94. glBindTexture, GLenum<3553>, GLuint<631>" \0 M9 V! F4 H4 v$ R! Y
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>6 ]7 I8 D# z6 I# z% H
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    1 E# j" {+ [0 e: p7 G* X0 A; E+ `( T
  97. glClear, GLbitfield<16384>9 \5 R& ~- v4 X) r
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>7 I0 I) P6 U6 ^% I) t; H  E
  99. glEnable, GLenum<3553>
    8 g7 \0 I6 n. d" E4 h7 R
  100. glBegin, GLenum<7>- {3 H& k0 i* n$ w5 V4 }
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>; l4 m* P# `2 \* T6 E: j
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    & n- L3 K! X3 a
  103. glVertex2i, GLint<0>, GLint<768>
    ' E( c# z3 u& Z( D4 P6 @
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>! T4 h% G% R* E9 X+ n# m/ N$ m
  105. glVertex2i, GLint<1024>, GLint<768>
    " Z) @7 K, C* J) v4 Z: f- q8 Q9 O$ k
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>' R* u2 _1 M' R7 l0 N6 P
  107. glVertex2i, GLint<1024>, GLint<-256>8 G0 s0 L. v# z8 b/ X' z
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>+ O. A3 K  k4 Y2 S( w$ H& F
  109. glVertex2i, GLint<0>, GLint<-256>
    * {: h+ E; I1 c2 B. r( o$ h$ o
复制代码

0 r1 W  O( W* v! c( i
" s! W9 _, Q1 \8 s+ y! u9 I
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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