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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑
4 _% L9 i2 _; S; `7 c9 M1 m, w0 V3 s8 k" I
本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,, V: D- Q1 w! T$ ]; l. P  Z
游戏应该实际只用了其中1个,暂时作下记录。
' q+ y! f7 d% p5 f. h. t* o9 F9 h$ y( |* l4 \! Y5 [& A
DirectDraw是由bin目录下的ddraw2d.dll来完成的。
0 m7 S) ~! m2 N; ]" ~) f以下是一处的初始化代码
$ y: p% E, U% F( a0 G
  1. CSpace:10015015$ I1 _, i3 s' g- W  o
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j9 _( V, \. o1 V
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    ( j; q+ l( l! r& K) G$ {( w
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    ' ?* k* P3 P+ Y( X
  5. CSpace:1001501F                 mov     ecx, [eax+230h]/ o1 n# ]+ H' {3 {
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]  g$ J; X$ _2 a
  7. CSpace:10015029                 test    edx, edx
    6 n3 L. x! o4 `$ u* s3 j
  8. CSpace:1001502B                 jnz     short loc_1001503C" z9 k, ~8 h6 N0 t2 O5 G5 b
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]9 u' ?( E6 \3 J; W/ s$ B& U" C
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    ; @7 X5 Q5 z5 Y9 M
  11. CSpace:10015036                 add     ecx, 8" `# k. G7 m( u& V& h* \1 X: a3 p
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    ' z' }% F8 @! C: I
  13. CSpace:1001503C
      a: O7 f: o: z. c
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    + C: I, O7 `) Y: a% t+ J1 f
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    + r; R" v% P4 p+ z
  16. CSpace:1001503F                 mov     ecx, [eax+230h]5 B5 s4 U! X3 u6 M5 g, U% O; \% s! J
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]' I) z  D/ x1 k' I0 O1 x/ }4 U
  18. CSpace:10015048                 push    edx/ z. y& ?) E( S0 a
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]* B* g; ?: w  M
  20. CSpace:1001504C                 mov     ecx, [eax+230h]# m3 l" ]8 _; t2 M% ]. \
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    . t  T* b. l9 @2 B, a8 Z5 Y
  22. CSpace:10015055                 push    edx
    4 h# }# X. @& [" X9 W' x6 t5 @
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"* r4 u! e3 a/ h  [3 D
  24. CSpace:1001505B                 push    3% Q& G1 d" D- ]2 A
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    : r9 T/ W, ~: a% F
  26. CSpace:10015060                 push    eax$ F; ~9 _& }% C) L  W$ y0 n" a# X
  27. CSpace:10015061                 call    sub_1003882A+ X' l; Z5 s5 ^! e/ P6 m
  28. CSpace:10015066                 add     esp, 14h
    % o6 g( W+ u( A5 L' O8 X' a
  29. CSpace:10015069                 push    0               ; pUnkOuter) s) B9 H: |) Y* p/ L; Z
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]4 b4 i6 g% E" E  B5 @8 H
  31. CSpace:1001506E                 add     eax, 1DCh
    4 A, ^1 o+ M1 N2 M0 q* v/ o
  32. CSpace:10015073                 push    eax             ; lplpDD+ v+ K6 f+ y, [' }6 _5 {
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]# Y. @- y5 O! }, c
  34. CSpace:10015077                 push    ecx             ; lpGUID
    + E! e5 b( ^3 x3 c/ D; U
  35. CSpace:10015078                 call    j_DirectDrawCreate
    0 W: k9 K1 k. P$ [5 R  l" o5 w
  36. CSpace:1001507D                 mov     [ebp+var_14], eax) i6 y1 E% h- k5 ^& D
  37. CSpace:10015080                 cmp     [ebp+var_14], 01 R$ W# L+ D* i- u
  38. CSpace:10015084                 jz      short loc_1001509E: J# z; U! O8 }8 [6 ~
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    ; [- P; L) B+ {/ y( _' X% k
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]; x, q6 ]$ @8 ?- q0 {0 ^
  41. CSpace:1001508E                 push    eax7 |+ v7 C; G6 A! M% y1 X5 v
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    5 Q; P# w! J. f4 I7 u5 a9 D% l
  43. CSpace:10015092                 call    sub_10038F3C3 i* i& W0 g; O0 \1 J
  44. CSpace:10015097                 xor     al, al, `9 @) |! j. I" y
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
6 u. }' N& i8 V: _+ D1 f, j
5 [3 P3 x4 Q% ^: ~! K1 l
' W# }% O7 ^- E3 Q/ `
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
" K4 l# j* k6 [* Z) H0 I记录到log_GL.out文件中。以下是摘录的一段。! N1 z. D$ D% t- y/ w
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
; r' c% H' j- |8 m; ?( O以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
4 [3 ~4 ?% x" @4 P+ p9 q
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>0 o$ d+ i" E- k4 j( {! i& A! G
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    , t" {$ _# u1 V7 v0 o
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>; ~# ?& t& ^, B% @5 W0 q% i
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>/ E4 q2 b' k  q
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    1 [+ I# G0 t" y% j! b/ {( d* c$ d
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    ( \! d7 R; H# [0 S- `; G5 U; G  S
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    6 D% Y" q1 ^0 Z! l
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    4 ^1 u7 u# @8 w. d$ V; z
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>% \" b8 m1 _8 P  U2 q- k% h- M& m
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>: ~$ ~1 ]0 [4 J9 V4 J0 M
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    & x" k2 q# h3 @9 k6 Q8 s9 f
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    - A* ]4 K! D) d5 Z( F8 p, Q
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>  L9 Q# N, G' z
  14. glClear, GLbitfield<256>" ^* B) \( C# k* d4 z% v
  15. glShadeModel, GLenum<7424>/ I3 s; e' v/ I
  16. glDisable, GLenum<2929>
    & m- M9 ]/ v1 ^% `% T. V3 [
  17. glDisable, GLenum<3008>8 u" W# t! w. b8 y2 F# B2 e- h
  18. glDisable, GLenum<2896>
    * j$ l5 w: @' X, O) b' j9 ~
  19. glEnable, GLenum<3042>
    & Y/ q8 m9 @) z4 F' M- b: H
  20. glDisable, GLenum<3553>
    , M( P% w' J) j2 f* Q
  21. glBindTexture, GLenum<3553>, GLuint<631>0 N8 t+ Y3 J, J0 t* `5 F( W
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>( c* a2 W3 j& S7 n( P  J3 Z
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>9 g% L; q+ {2 d  w
  24. glClear, GLbitfield<16384>" \" X' M9 g$ n, x/ v6 B
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>  m. [2 g! P2 K8 u) X9 M% ]
  26. glEnable, GLenum<3553>
    ! U! R: Z: d1 y5 V" j  ?2 N. d
  27. glBegin, GLenum<7>, V  J. e/ |* T" J6 a; c4 Z- E+ F
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    + V+ [" |. c& c1 b/ u
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>6 w+ l! @. j& X
  30. glVertex2i, GLint<0>, GLint<768>
    * N$ X7 y1 ^4 y4 E! @3 g+ B1 ]
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>5 |2 Z: E; m3 e+ e; J
  32. glVertex2i, GLint<1024>, GLint<768>. M6 @8 L8 ~4 w  u8 V
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    * f& @, X" J: L  U2 Y  c/ ?) P
  34. glVertex2i, GLint<1024>, GLint<-256>
    5 P+ P/ a8 D/ ]5 p6 M1 T* w4 I0 e
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>/ R0 [4 l6 i/ Q2 d' Y* M, S
  36. glVertex2i, GLint<0>, GLint<-256>1 W: H5 c/ e: M0 x/ J. @; W
  37. glEnd
    . B5 ?' `: a- b; i( V
  38. glShadeModel, GLenum<7424>
    * m% L+ d1 {+ s' Q1 K! {( |: ]$ k
  39. glGetError
    " ]# \' Y7 U  c' N4 g/ F
  40. glDisable, GLenum<2929>; W/ p% g- K/ E' s6 i0 C, N
  41. glGetError
    2 q' Q. ^3 N) K* \6 d/ W* N
  42. glBlendFunc, GLenum<770>, GLenum<771>
    . d5 q5 y0 s* [+ y9 h! P
  43. glGetError
    . A8 F* N' ~8 U7 D. h& w9 ]
  44. glEnable, GLenum<3042>* c: X$ V! H# f5 X0 c/ D) u
  45. glGetError
    9 [# H/ p% ?9 P9 i2 @
  46. glDisable, GLenum<3553>( k5 d8 [3 g& P, t& M
  47. glGetError+ x6 h5 C/ G' R8 h2 j
  48. glBegin, GLenum<7>/ b7 Y, W9 ]8 S# x9 H" J# ?
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    : L: o+ r  G. y8 J4 b9 J# |. F
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    3 O) S  _* T: P# O5 r2 G0 z7 |
  51. glVertex2i, GLint<0>, GLint<768>
    0 U8 R& \8 X# Q  j4 a1 u" V
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>. m5 u7 Z" a  M4 i+ ?% Q
  53. glVertex2i, GLint<1024>, GLint<768>
    . A1 [) H, N; F0 h5 C* n( @- Z
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>1 S4 @- i/ r3 b/ B6 b
  55. glVertex2i, GLint<1024>, GLint<0>
    ( n' H% L9 j" V: A
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>: _- M5 Y3 {8 E3 S) K2 o
  57. glVertex2i, GLint<0>, GLint<0>
    " ?4 \" h8 ^3 ?4 p7 z4 _1 c0 E+ E8 @$ o: o
  58. glEnd
    " i' X# u5 [+ y# d
  59. glGetError
    + n/ d7 z. u% Z, y. p" l: l0 N
  60. glEnable, GLenum<3553>
    ' j- ~9 x4 ^8 \, T
  61. glGetError- h5 y1 l: H3 ]  g
  62. glFlush
    ; e* z$ z" S9 F  P1 f
  63. wglSwapBuffers+ {4 H9 t  ^! q  g
  64. ---------------------------
    + M- H; R3 h  P5 g6 p& F: @% [$ N
  65. , HDC<-33484711>
    $ A( `! u1 H# \
  66. wglGetPixelFormat, HDC<-33484711>
    + T- M9 z' Q) o2 x# @( o5 b
  67. glMatrixMode, GLenum<5889>- P: g' ?8 G+ v
  68. glLoadIdentity6 a3 j, r+ e1 q* ?* t
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>5 O" {( ]$ Z; x9 I' n" k
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    ' @1 B+ }$ O& O
  71. glMatrixMode, GLenum<5888>- G' l0 L4 M3 ?+ t8 T+ y. D  O
  72. glLoadIdentity
    " z) y" v# F/ S( c( L" h( K! U
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>- e1 I8 W& |% M, k1 t8 a; l
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>* e9 Q/ Y! }! j
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    # J) q9 S/ G( T5 {" B9 ~; ]' `
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>/ \9 C9 r; f  R! E. O$ G; ^
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    2 [! `1 o& m8 F0 ]" Y) ?% E) A% D
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    / E+ M3 A0 S3 A7 [, t
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>' M1 e$ e& G. q8 R7 W
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>8 l- N8 @% ]% x- m/ R
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>% T% {# G- M0 N$ g* h
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>5 g1 b7 P( K9 O1 C3 L  k( m
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>; O2 ^' m. ]2 Y" ^
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>  F4 f& ]- R; n. M  n
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    7 O; @! ?5 J  L' Y5 o
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>) B; h# s3 Z% C3 ^3 T6 R" ~
  87. glClear, GLbitfield<256>
    6 q, [, N- p" l+ h+ W" f
  88. glShadeModel, GLenum<7424>
    & ]# }5 ]: H- j$ T5 @
  89. glDisable, GLenum<2929>
    $ b. N0 G2 j: `, [- w1 r6 B
  90. glDisable, GLenum<3008>
    . F; L3 f7 [1 g3 Y
  91. glDisable, GLenum<2896>
    ; M  I7 A+ A7 a9 P1 J8 A  _& @
  92. glEnable, GLenum<3042>
    7 ]  }9 ^+ Y, G/ h0 O1 t
  93. glDisable, GLenum<3553>) W; k9 V- c  h. V# S
  94. glBindTexture, GLenum<3553>, GLuint<631>
    1 c% |: K  P& I$ f
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>8 T+ A* S2 K' w# H! v/ o
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    7 i- L0 [! K( Z+ ^6 s2 r2 K! X; D6 h
  97. glClear, GLbitfield<16384>4 F$ w4 D2 Y& ?6 U$ x
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    4 f4 C9 W& W: e( g' e
  99. glEnable, GLenum<3553>
    * i+ Z- B& s' h5 A5 ]; e
  100. glBegin, GLenum<7>9 u# Z$ X" b" e
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>5 j" `+ ~7 k3 z" l1 W& M
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    - a1 f5 T  T/ F# ?5 U
  103. glVertex2i, GLint<0>, GLint<768>. K, W& e6 U; X. Y
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    & @9 Q) |- G+ Z. ?4 W+ J: G
  105. glVertex2i, GLint<1024>, GLint<768>
    0 |  ^, K0 O; M6 @8 M5 G8 W
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>" \) {7 p7 r6 N& Y. T
  107. glVertex2i, GLint<1024>, GLint<-256>* c; q4 Q  k) z: N
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>( S! u4 t0 |# I6 F
  109. glVertex2i, GLint<0>, GLint<-256>/ v/ d# S" R3 m" ]
复制代码

/ i1 Y: `: s) k% V$ J5 U  T5 H
2 K  x$ X. K# V; X. b$ [* 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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