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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑
- v( g" i/ ]# f' S5 R- J. q
3 l0 m6 Y4 u5 D5 w8 t本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
3 S5 E: s# ~2 E+ b" Q  d( y' B, D8 g# v) H游戏应该实际只用了其中1个,暂时作下记录。% b. Z8 ~3 p" a( `/ q! G

7 I( P' `; B1 C2 aDirectDraw是由bin目录下的ddraw2d.dll来完成的。
% y* t+ ^4 l# m+ A& P以下是一处的初始化代码
$ F$ i, r7 b/ q2 q: T
  1. CSpace:10015015
    2 {& N" S+ j9 d% g+ T7 C2 }0 h/ Z
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j% {& b  T5 p( q$ T: j
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0; w* P: E+ l8 j) x
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    & K/ d# G0 U* ~+ c4 S9 }3 U( q
  5. CSpace:1001501F                 mov     ecx, [eax+230h]/ g8 X6 U6 D  {* [
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]5 i* N! h% p0 n; ?
  7. CSpace:10015029                 test    edx, edx
    ' p/ O9 ?4 h0 p; ?. D* U. b  w
  8. CSpace:1001502B                 jnz     short loc_1001503C
    ! c& L  r- Z) }2 V2 E3 j( W$ d
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]4 {% c+ e0 ^1 `9 U. V
  10. CSpace:10015030                 mov     ecx, [eax+230h]0 f+ H( O- c6 @1 k1 O5 A9 [
  11. CSpace:10015036                 add     ecx, 8
    : V4 p1 l8 B8 M6 ~$ ~2 z
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx4 [$ [0 p$ Y8 T1 A
  13. CSpace:1001503C
    % s- L1 |: k2 b6 ?
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    3 L* p/ N: I$ m# R& @) ?: ^
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]0 U6 r& m3 k# G) U/ A0 j0 Q6 k+ F: f
  16. CSpace:1001503F                 mov     ecx, [eax+230h]9 p: }, u0 O6 k2 K& y* }" a
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]% @  w: G& Z+ e! R$ v- ^
  18. CSpace:10015048                 push    edx: A( Y' T! K5 \& r
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]/ f2 H, s6 r, B, r
  20. CSpace:1001504C                 mov     ecx, [eax+230h]% ]+ U& R8 a. G! X1 j* A
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    ) D- g1 C6 ]2 n) t
  22. CSpace:10015055                 push    edx
    5 o! v6 Q6 u9 a9 F( s. S
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"2 P, w; ]) P+ Q- p7 j
  24. CSpace:1001505B                 push    36 t* r$ X' k, k0 Q4 g5 |3 W8 Y9 s
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    0 E. w4 E2 }. z+ m$ x3 s, ~" S
  26. CSpace:10015060                 push    eax
    0 o- p, y5 w* R2 I1 l! m/ _
  27. CSpace:10015061                 call    sub_1003882A6 o4 p% Y6 P/ T
  28. CSpace:10015066                 add     esp, 14h
    - [$ h$ q# m& h2 H! |8 |
  29. CSpace:10015069                 push    0               ; pUnkOuter
    . k' j" v: P" G
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]" h( \$ L+ ]& U
  31. CSpace:1001506E                 add     eax, 1DCh- _" ~0 g& Y  Y" ?6 `/ U+ U& s
  32. CSpace:10015073                 push    eax             ; lplpDD6 g6 ^0 Z+ @3 L
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    6 m) y+ b" k5 t8 |; ?6 o
  34. CSpace:10015077                 push    ecx             ; lpGUID" \8 H1 R  f4 o
  35. CSpace:10015078                 call    j_DirectDrawCreate, k& c! S) s) k- A) _, W3 W
  36. CSpace:1001507D                 mov     [ebp+var_14], eax) q1 q! E7 ^8 g  b, P7 U
  37. CSpace:10015080                 cmp     [ebp+var_14], 0, C9 D9 S; A4 \% v5 v
  38. CSpace:10015084                 jz      short loc_1001509E: a  R5 n; s" u
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"- u5 T% @  k; q7 q7 B
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]$ w9 R$ g- d( K
  41. CSpace:1001508E                 push    eax* v5 W/ v" k8 T2 P2 v
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]5 B' {+ N: l3 l
  43. CSpace:10015092                 call    sub_10038F3C& R0 l  F) Z+ v
  44. CSpace:10015097                 xor     al, al
    . A$ D* b) a- N6 |
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

/ F  ~% P) a9 L4 g8 ]
6 F3 e' T( J) T. a1 N3 d1 }8 a3 d& c  ?# v% W0 d" t2 h
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
: Z  M; S6 p: t% b% K记录到log_GL.out文件中。以下是摘录的一段。
3 H; r8 R9 M" N2 ^* f我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。2 d/ v$ z& A# W% A
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
6 m& ~  x2 C& }
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>, w* q1 t  H/ ~
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>. {% _  b) _0 G$ W0 `
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>% k/ p6 T, A7 x  u4 t" y' c& J
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>7 z; v- [- u# x2 T( Q# K5 a
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>+ \8 g9 R3 n4 y. ]/ `4 I
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    9 {* L. w' i/ C5 I2 ^3 e- V
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216># p8 x" n, }3 g  e. |/ q( B
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    / y4 P3 P' S" o
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    0 b6 s' b7 G: ]
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>7 V- ~2 c: O* N+ ~: t' @9 ^
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    4 ^: H4 t9 G3 ~/ E; B8 l0 N
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>! m( b' ]! c* f! J9 ^$ ?) N
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>' v/ |( ?. d- }7 Z. i6 q
  14. glClear, GLbitfield<256>; {# s' G0 e& `( \
  15. glShadeModel, GLenum<7424>
    4 `8 L1 \" A# Q/ n5 a/ o
  16. glDisable, GLenum<2929>
    $ }) R5 v/ r+ b
  17. glDisable, GLenum<3008>
    & c# n8 Y* _* J2 m& ?% d# B
  18. glDisable, GLenum<2896>: l' U# m6 G. l9 I% q7 }. ~8 z- T6 e
  19. glEnable, GLenum<3042>- w+ c1 m/ l2 G! ]' S( v5 p$ e0 A  K
  20. glDisable, GLenum<3553>
    8 s" S# e1 k8 Y4 S, U! C
  21. glBindTexture, GLenum<3553>, GLuint<631>
    , C9 ^! d  o# r$ t: r+ t
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>% T7 I$ h$ ?+ V
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    4 n6 {$ k  _2 ^) }
  24. glClear, GLbitfield<16384>, o- Y5 D% j% X: n8 Q, @9 ?9 ~
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    8 \& X  H- D3 R( f; `% i, ]' C
  26. glEnable, GLenum<3553>
    : O+ m7 \. v! H2 {9 t
  27. glBegin, GLenum<7>6 \6 a& ~( d& M% \; R
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    * j% c& ^7 r) o9 b/ }
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    - c! s# C$ G" v6 C9 B
  30. glVertex2i, GLint<0>, GLint<768>/ i% Q2 |. h8 c/ \4 Q0 q6 G- G
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>5 q" I! w' ~: O
  32. glVertex2i, GLint<1024>, GLint<768>+ r: w  r$ q8 }
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    8 ~/ l# H5 g, P9 L! Q9 Q( f4 t( C' k
  34. glVertex2i, GLint<1024>, GLint<-256>
    1 i/ Y  x; k( s8 e. p- n( q9 j+ [
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    8 n* K$ n# O8 ?) v
  36. glVertex2i, GLint<0>, GLint<-256>
    . @6 k. e6 {3 L3 i
  37. glEnd
    5 A5 v$ @0 f; N' U( `& A1 u
  38. glShadeModel, GLenum<7424>, Y/ k- L, _: B9 R' `
  39. glGetError5 o& A9 @+ n1 W
  40. glDisable, GLenum<2929>; a1 Y7 o' G) k# z- J& f
  41. glGetError9 b' X# v/ w4 o8 B
  42. glBlendFunc, GLenum<770>, GLenum<771>& w! y1 {8 J" d8 E0 o) T2 H: f
  43. glGetError
    5 Y, z" [! K, {+ B5 P
  44. glEnable, GLenum<3042>0 |! k. n, w: o* G% D. E  k
  45. glGetError( [3 w4 L- |/ W* Q
  46. glDisable, GLenum<3553>( P( \7 D. D# o8 z
  47. glGetError3 u2 N7 p) [, @- ]# q' F) b6 I( ]
  48. glBegin, GLenum<7>" b5 O0 J2 c9 W# l8 _' p
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    8 g" Y$ }1 [& Z
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    ( B/ s2 P3 Y! P1 y8 L1 w1 ?- K0 r
  51. glVertex2i, GLint<0>, GLint<768>
    # S9 X$ V; d  }' Y# t
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>8 F. T# x/ o2 `" k
  53. glVertex2i, GLint<1024>, GLint<768>9 e. ~  c2 y; ]- w, D& @% Y* m# B
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    . q2 r" }* F  w9 Q! r& i( \
  55. glVertex2i, GLint<1024>, GLint<0>8 i1 I/ q* I2 A. f2 r
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>, `& f  C. T+ _( U, @  k' ?
  57. glVertex2i, GLint<0>, GLint<0>$ Q' u3 c" |. _; u
  58. glEnd
    3 g) L: ^0 k7 B: J3 ], V
  59. glGetError- V/ b8 Y4 z' s" V# N8 y
  60. glEnable, GLenum<3553>
    . u% r, A3 {* {- T* Q
  61. glGetError
    6 K7 o. W! t& m) Q
  62. glFlush
    , \* e! P; G1 e) E
  63. wglSwapBuffers
    " o4 p9 N! S. v, v7 Z) k& b
  64. ---------------------------2 h2 _2 J# m. H4 I& t
  65. , HDC<-33484711>/ z) ~0 g9 D* ^$ F: F+ n4 v
  66. wglGetPixelFormat, HDC<-33484711>
    2 W' B( T' R, Y1 S
  67. glMatrixMode, GLenum<5889>
    2 T# f+ f" b- z2 R9 B( F
  68. glLoadIdentity
    + b- V9 g' J, u1 v
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>0 P4 J5 g  V$ ~; d7 w  ?" h
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    " g; ]1 D3 g/ }! n7 |# i( y( J
  71. glMatrixMode, GLenum<5888>9 L0 M9 |) T+ X3 q+ C2 ^
  72. glLoadIdentity5 I3 q* L0 ^% l( E. P# O- b/ [
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>: s# O1 P) C7 C/ @/ ?5 g, s1 {; A3 u* U
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>( F+ z8 P  i) E0 ^# `  g1 U3 n  a
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>8 O: b5 g/ w) x8 w: a7 `
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
      d' A, {* ?. s! l
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>) J+ Z; z9 v/ |. U" w% T. R  e/ c
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>+ N, O2 M; G( f" I$ A
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    % R9 w5 E/ p9 @# s' v
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>$ q' Z( Y$ b9 c
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>, h' j/ X$ Z4 R
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>! y7 p) k) d5 V) }
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    & _1 d0 P$ R9 Y' {; A1 f
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>- g1 e- S& x' i2 F5 h
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>, w- z. G2 h2 S& k! I
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>& r' j# D/ |9 x. J7 |; v
  87. glClear, GLbitfield<256>
      B4 f; L4 }4 U: P( Y
  88. glShadeModel, GLenum<7424>
    / K: w# E* }" Q* U: \
  89. glDisable, GLenum<2929>9 O1 A9 c7 z3 X% O
  90. glDisable, GLenum<3008>
    2 t9 a3 N$ E5 g: D2 t# v  z" z
  91. glDisable, GLenum<2896>
    9 Z6 S$ m7 P0 |& c7 n# X/ K
  92. glEnable, GLenum<3042>
    9 |8 l' J% n. T" ^* }
  93. glDisable, GLenum<3553>6 a) Q( E4 z! ^2 z* \
  94. glBindTexture, GLenum<3553>, GLuint<631>
    8 E* _7 p9 v, c
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>5 |# u1 N: Z" b  E, R
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>- c7 k' I, v; q6 ~# h5 u" z
  97. glClear, GLbitfield<16384>
    - F9 j9 ^5 V9 h$ D# i* Y
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>' D- i+ o$ e3 e1 t1 M+ O) D$ X
  99. glEnable, GLenum<3553>
    1 i2 \3 i6 w# [' R" W8 H
  100. glBegin, GLenum<7>6 [. C2 k$ u7 a
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    # _0 h: z0 C4 @% Z0 l; ]& n
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    $ b2 p/ c: D- m$ {( c
  103. glVertex2i, GLint<0>, GLint<768>
    + m/ Y& J  {  Z# R, M: K% k
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>1 ]9 c; X( n  S. Q" e2 B4 u8 H
  105. glVertex2i, GLint<1024>, GLint<768>8 w$ t, G+ N0 |
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>  @9 K# W4 D, M! k2 f( R
  107. glVertex2i, GLint<1024>, GLint<-256>
    1 b6 z- u0 Q$ s4 F; t$ _
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>, ^' H. n" W& m; s" r- v5 Y0 a% A
  109. glVertex2i, GLint<0>, GLint<-256>
    ; R* ^4 O. O% A) X% k+ v0 @" K
复制代码
( N1 ^% K5 {0 k/ [

6 M$ n8 e4 B# n7 L6 C7 m
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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