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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 # G* E0 \8 ]& o% d; q; ]
( g8 ?( K/ c6 |( D2 U; L% c2 V
本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
# [5 P5 N$ o: x. y6 k. X游戏应该实际只用了其中1个,暂时作下记录。
  u' z# m+ `; q7 p8 a
0 n' r6 w/ O* f- J( B1 qDirectDraw是由bin目录下的ddraw2d.dll来完成的。
, ]1 u! d" e. J7 x6 v以下是一处的初始化代码
* F" I/ N$ K1 g8 S/ s, P
  1. CSpace:100150150 H, b& K$ I) D+ u
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    ' L  j8 P- H9 K. z& z0 h6 `. q- f
  3. CSpace:10015015                 mov     [ebp+lpGUID], 05 M* ]" q$ D. h4 I+ ^2 A8 Z/ C
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    $ j3 J8 I" l0 w+ `1 j
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    7 j) ^; A6 D/ x# E
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    % j) q% ^& a) H% ~7 D
  7. CSpace:10015029                 test    edx, edx& o7 f" b. H3 s4 }
  8. CSpace:1001502B                 jnz     short loc_1001503C
    0 _/ {, ^7 G) x* j6 L% I& X# E2 m0 r
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    . A7 e, q  H. ~2 z
  10. CSpace:10015030                 mov     ecx, [eax+230h]1 B; k* p# Z3 I4 K5 w, D
  11. CSpace:10015036                 add     ecx, 8
      L7 g% M  T" x1 m7 {
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx! L  N8 f. q1 g: N8 |9 d6 @
  13. CSpace:1001503C& b/ ]4 u( k" `0 U% k# a
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    . E( O0 u; I- U6 a( ?
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    : z* y- R( ^3 d' B
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    ! {* S: L$ A1 _7 U
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
      `( z6 o- K; T  T+ h2 J
  18. CSpace:10015048                 push    edx
    4 W% Z8 B1 V! j! G% G
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    , Z9 |1 x' F+ o$ U% U* z
  20. CSpace:1001504C                 mov     ecx, [eax+230h]9 a! s! h: Z& e( x- p% f
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    ! D! I. J3 z2 Z; J, W/ e8 U& A% H
  22. CSpace:10015055                 push    edx
    % K* h# w- _+ p+ k: v, f  Y
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"0 J  S: _( `6 n0 P: j) ~5 Q
  24. CSpace:1001505B                 push    3
    7 z( c- |$ W4 Z, p
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]  e. @& c4 \- P! k* b" C6 t, F
  26. CSpace:10015060                 push    eax
    / f) `1 N9 S& q# @
  27. CSpace:10015061                 call    sub_1003882A
    8 O4 O- t2 X9 f1 N% D/ W: O7 t  k$ L3 ]
  28. CSpace:10015066                 add     esp, 14h9 D/ K# h8 Z) P: S4 R' S& n
  29. CSpace:10015069                 push    0               ; pUnkOuter
    ( G: Q5 Q) }7 h+ i  G7 T
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]
    1 o: p% ^% s! `- s. j  ^
  31. CSpace:1001506E                 add     eax, 1DCh
    $ r) h  m# ~9 G& i, E+ [
  32. CSpace:10015073                 push    eax             ; lplpDD
      y  x4 _4 F" g  C6 V" \
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    4 Y3 D2 Z  B5 F8 L4 d& w2 j1 {
  34. CSpace:10015077                 push    ecx             ; lpGUID
    6 s, F# S4 \: h% m9 c$ g) I5 `/ \
  35. CSpace:10015078                 call    j_DirectDrawCreate
    / H" [/ m2 A/ P/ {; _
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    % @6 X& W$ c$ u% \% N( r
  37. CSpace:10015080                 cmp     [ebp+var_14], 0* F9 N1 r1 D: r$ ]' n8 m
  38. CSpace:10015084                 jz      short loc_1001509E6 y. y  |* x9 N9 w# e6 e; u: \
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"/ @1 H/ u1 P4 ?( ]8 N
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]7 s' X- C) B1 P8 `
  41. CSpace:1001508E                 push    eax: }2 b' G3 _# W0 l6 W# M1 \3 [
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    ; X6 L5 k! l) V; b- C. [
  43. CSpace:10015092                 call    sub_10038F3C# i1 l  Z! w7 \1 M! y
  44. CSpace:10015097                 xor     al, al+ @3 x  A+ |! X, ]* X8 i9 v
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
. K( T' S2 n* h# a

* s2 S; j" ?) j6 B6 i; L7 r1 t& W7 q0 c- X  b
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
8 a6 q+ C8 y) e1 p' i记录到log_GL.out文件中。以下是摘录的一段。7 L  Z% B+ d+ S0 `) q
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。# ~, j8 Y. s) ^. f- h7 V
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?) j( u# C$ t7 Y7 _& m
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>1 _+ h- |, w7 G9 N6 T% ]
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>2 [% ~  D0 m0 u8 {
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    ' r9 c9 f, V4 w
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    6 d& U! F2 @5 h+ h
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    $ H% u+ Y, X) k2 u5 Y
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>2 o/ W; J$ j" R/ m% ~
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    . C: Z$ h- _- n
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>1 q5 u) `/ T( i0 _; D2 ~
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>5 L$ d% \0 t. ~2 k
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>4 j) m. j4 Y6 @& s/ B8 r
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    2 V6 \, Z6 Q4 R1 t: T' O9 N
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>& A8 G# m6 s# v" F
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    0 G9 K) J4 y" N5 H6 y% Q' X& U0 E/ A9 h
  14. glClear, GLbitfield<256>' {; a0 [! ?/ f. A
  15. glShadeModel, GLenum<7424>
    6 u: [, r9 z! V$ p0 j9 S
  16. glDisable, GLenum<2929>
    ! d  I! \3 e; V  L
  17. glDisable, GLenum<3008>. W7 d* c, }, E6 [! [
  18. glDisable, GLenum<2896>: K- A. s6 Q4 a
  19. glEnable, GLenum<3042># g9 H9 }8 Z" e6 ^* j7 T3 x
  20. glDisable, GLenum<3553>& q6 U: Q. L& b5 e0 r0 ]8 ]
  21. glBindTexture, GLenum<3553>, GLuint<631>) w+ @' a; E- ]5 l
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>! L( y) L5 x0 X% b- d$ E& t
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    ' N2 p  u% C5 J+ t, c9 W7 d
  24. glClear, GLbitfield<16384>
    3 x2 K! j! R" e  i" T
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>6 ^! j2 H- D' |' }
  26. glEnable, GLenum<3553>* ^$ W" ~+ q6 Y! Z; {
  27. glBegin, GLenum<7>5 L8 @2 U4 t6 U' j: k
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>/ A, `+ P6 b; ^3 F' y) E
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>4 N) W$ c6 r' B2 @% V
  30. glVertex2i, GLint<0>, GLint<768>
    8 S/ w& S& j3 J% [
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>& Y6 A( Q. \3 x# @8 B
  32. glVertex2i, GLint<1024>, GLint<768>
    9 z6 X  z( M8 }) i
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
      p: s; H  X2 T! g6 J
  34. glVertex2i, GLint<1024>, GLint<-256># u# u% B+ Y, I: Z4 q! y
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    * C: E0 I+ |8 j% i/ J& g
  36. glVertex2i, GLint<0>, GLint<-256>
    / t, p% c: H* w
  37. glEnd
    # k7 Q/ g: E5 ?
  38. glShadeModel, GLenum<7424>  s4 |# `1 w, q# ]8 F/ |
  39. glGetError& A9 b6 S; k* x' ?5 i5 K
  40. glDisable, GLenum<2929>
    $ U2 w  i+ K2 u% T4 V7 v" v
  41. glGetError
    . d8 J& b5 c5 {! W+ t  G
  42. glBlendFunc, GLenum<770>, GLenum<771>
    & Y: \; d" I2 N. Z
  43. glGetError
    ' l9 R" F( o2 w: G0 b
  44. glEnable, GLenum<3042>0 d% F! E+ r" [) c4 [: Q
  45. glGetError8 q8 ]* k1 X: i1 q3 J6 M
  46. glDisable, GLenum<3553>) Q! {* A- L& K8 l, R# V9 ^
  47. glGetError
    - Y4 h$ [3 \8 M6 J0 \# I' _1 Z
  48. glBegin, GLenum<7>
      y, R, B( E: T; v
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>" m& ^3 O9 p) Q0 D2 d4 C) T
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>* N( G% S1 f/ B/ R
  51. glVertex2i, GLint<0>, GLint<768>
    : v* t4 Q( v# Y: Z. p: m
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    % a0 Z, F. Z5 d& k) l. h. E
  53. glVertex2i, GLint<1024>, GLint<768>; l' h7 U0 `9 e* f' {) ]' w  A! j
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    # ]' P8 c' u, v! F
  55. glVertex2i, GLint<1024>, GLint<0>3 b2 k/ Q9 ]" W4 X" C6 J
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    5 ^! c4 T) R. J8 g; I: h
  57. glVertex2i, GLint<0>, GLint<0>
    % s! ~$ Z$ ~0 e
  58. glEnd5 J0 e2 a8 w- k- d
  59. glGetError
    7 ~# @+ }3 N6 e. _3 I  F( R
  60. glEnable, GLenum<3553>8 A0 |' F5 X! J: m" ]* h
  61. glGetError
    ; n- P0 \- u! i) u) Z
  62. glFlush5 B9 \5 s% g1 w6 O% O
  63. wglSwapBuffers
    4 U1 B3 N( J/ Q/ v0 Y0 s1 x1 T
  64. ---------------------------
    # g- k* W" g5 o+ k/ D& A8 j8 ?, B
  65. , HDC<-33484711>
    & X2 V  u0 f" S8 p# O3 c! J
  66. wglGetPixelFormat, HDC<-33484711>
    , u# }* N7 W, ^7 x
  67. glMatrixMode, GLenum<5889>: g  ]9 k" l3 \& M6 ^- |# X* Y. z
  68. glLoadIdentity; t4 C' S2 X  }( p5 ?( _
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>0 d  ^/ q, E% h! v
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    + D2 J/ b9 U: Q' I/ x1 S
  71. glMatrixMode, GLenum<5888>
    6 I* T( g6 H3 _' D0 F5 v
  72. glLoadIdentity
    ; }# L  c; ^% y# J& \# I/ Q1 E
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>& p- o5 _+ h8 V* s2 `3 O1 g
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>8 N( B. S9 O, W$ E3 J* y+ I6 ~) j
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    0 o# P/ @; g2 ]- ~, V/ G2 `1 D
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>" `2 u: U# `& ^3 S
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167># A7 d0 C& [4 c: `- b5 a. f( `
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>. F" ]+ c+ S4 R* O" g  E- k' [
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    1 H" j* D5 o: H- T
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>6 E% k) V- w2 `# z) d
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    . B+ [- G8 H2 T+ i2 I' V' Y
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>( l! @5 s3 P7 P8 J3 C) N/ ~
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>5 \4 [8 M9 J7 r$ h. G
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    ! }! O; X  L6 B1 i8 f
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    * g: Y: G! r4 e; |
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>. a" T  h3 x+ m% _3 y1 h
  87. glClear, GLbitfield<256>7 \0 {$ P, i4 f3 p- v  v! b
  88. glShadeModel, GLenum<7424>
    ) @4 O! Z4 f3 k6 V; {5 R6 A" Q
  89. glDisable, GLenum<2929>
    . U3 |+ t/ b! v7 k) R
  90. glDisable, GLenum<3008>
    ) t9 p7 g  |" ]( s  X! Y: }! b
  91. glDisable, GLenum<2896>4 R8 [  q" U  z" H# Y. ~
  92. glEnable, GLenum<3042>
    1 D  {6 D+ Y5 Y& X+ E& W7 N
  93. glDisable, GLenum<3553>2 }& n: A2 K) {% Z0 r
  94. glBindTexture, GLenum<3553>, GLuint<631>% F4 A6 `+ N  \( h8 J% g3 C4 L
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>" g/ g+ h. D" u) l$ G! @; e
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>! {0 l6 V0 C& {  }! ?3 t. C
  97. glClear, GLbitfield<16384>
    . H$ c) }# a# i. @$ [5 ^8 P. x: b
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    * M" a% w" _0 x0 {
  99. glEnable, GLenum<3553>
    : Q3 k  I% g$ Z, t
  100. glBegin, GLenum<7>9 B6 B. D* ^! V& s$ P% k. ]
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    * B' d9 D  q7 K: Z, @
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>" O3 L+ i) C& _2 P- N
  103. glVertex2i, GLint<0>, GLint<768>
    8 K/ i- @1 t. I+ L+ W( L
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>4 _$ r( G" z$ L$ l7 ?
  105. glVertex2i, GLint<1024>, GLint<768>4 D: E8 `$ m* y" L5 H
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    ' X" \& Z! y) h/ N3 T$ ?  m
  107. glVertex2i, GLint<1024>, GLint<-256>
    5 F7 g, e. j0 i: C
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    0 t6 k/ E' C; E% m
  109. glVertex2i, GLint<0>, GLint<-256>
    ) z+ `, H1 X6 O$ V7 I6 P2 g
复制代码

" r  Z- U. D8 e* ~& p
. v; f( K- E: @2 y6 f  R9 H
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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