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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 $ f) n" Q0 \* e" D
4 F* h# a; b) _7 J' h3 _4 ]0 O
本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,3 d, `7 t" t$ M4 K; @, G( P
游戏应该实际只用了其中1个,暂时作下记录。
* J( I( A% I+ D3 u5 Q( a, n9 ~7 M! b  F( C" x* Y
DirectDraw是由bin目录下的ddraw2d.dll来完成的。) F6 e* m: J+ y
以下是一处的初始化代码8 b) u* c- q8 k6 u
  1. CSpace:10015015
    , d3 J7 C+ e: x$ o* D" {
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j5 {8 t* K  b: t2 W* `
  3. CSpace:10015015                 mov     [ebp+lpGUID], 07 C7 T$ g) G& D0 V) }
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]+ s6 F- L' e9 B2 _! y
  5. CSpace:1001501F                 mov     ecx, [eax+230h]' M6 ^; g+ \. Y9 Z7 D$ h3 N0 B
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    0 ^1 n7 e* q& D4 l; \/ s2 x' F
  7. CSpace:10015029                 test    edx, edx
    ! s5 W( h. f9 N" p' ~- f  A; o# A( j5 Z
  8. CSpace:1001502B                 jnz     short loc_1001503C  [7 E8 i% b5 k! v0 k  C1 o
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]% X/ W' ]) Q# n( ^7 @# y. S: W0 o
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    ( d3 ^4 ], f4 o" @
  11. CSpace:10015036                 add     ecx, 8
    ) f# c6 T, [3 K6 p8 n) \
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx3 h, [7 x) Q# e: H# D1 \$ J
  13. CSpace:1001503C% x) @8 w" t+ p4 A: L
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    ; d- _* D$ L# F- ]5 U
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]0 K1 L! P' c8 r* ?: ]$ `2 I
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    1 ^9 g3 R! p1 d1 m9 y/ n( ?
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    , [) b5 d  Y# H7 A0 o  U) A
  18. CSpace:10015048                 push    edx7 o; a4 ?2 f% F" G
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    3 O, U7 _. P* y! |% b
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    ! V( k9 B1 s0 ~/ v7 [, T
  21. CSpace:10015052                 mov     edx, [ecx+20h]
    - }1 o: I  T% k9 T  t  C
  22. CSpace:10015055                 push    edx
    ' {5 m9 M1 y7 H  M- r, e& g  B; R
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    ; j  d( U, z; G! B/ g
  24. CSpace:1001505B                 push    3; w/ {. F5 j) N7 q2 |6 |1 d- O
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]. D& A, _0 N, T  T+ A
  26. CSpace:10015060                 push    eax1 U2 l; `! l" h" S' ~8 w3 U
  27. CSpace:10015061                 call    sub_1003882A  `9 b7 g  g) L8 T% c- L) W$ e
  28. CSpace:10015066                 add     esp, 14h
    0 D) e8 p- T  y* l. F
  29. CSpace:10015069                 push    0               ; pUnkOuter
    3 q+ j! Y: N( F1 X) }
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]' G* A2 w: _& o, \- O
  31. CSpace:1001506E                 add     eax, 1DCh: j, g1 ~7 b2 X1 {  d/ D6 C6 q
  32. CSpace:10015073                 push    eax             ; lplpDD& G1 j: B; X' n( b: ^; Q
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]6 @1 T2 s% A8 `* ^5 }
  34. CSpace:10015077                 push    ecx             ; lpGUID
      x/ i/ M4 O. y
  35. CSpace:10015078                 call    j_DirectDrawCreate
    1 F" J3 ]" g) V' a* `/ R
  36. CSpace:1001507D                 mov     [ebp+var_14], eax# H" a% \# z# S' K3 N  a
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    5 X& D) n" x0 G3 N8 e. Y# ~
  38. CSpace:10015084                 jz      short loc_1001509E0 }3 H9 L) K3 G2 M, \* f/ K
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"2 }+ E) V' z# b! j
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]9 U. x; O  K( J
  41. CSpace:1001508E                 push    eax0 x" T7 e! X$ ^. R" ~2 U- V
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    : J+ I( H: z/ y' `" A4 ^7 k8 w
  43. CSpace:10015092                 call    sub_10038F3C
    2 z; r2 ?2 ^/ O# i$ l
  44. CSpace:10015097                 xor     al, al7 v9 P. ^8 N- J* \3 K$ U! ]4 Y4 s
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

8 v4 i& a$ c. A# u# t0 L2 q" }- H
3 v9 q1 y0 I+ b* s
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
+ D  i( L5 l8 k, D1 i/ m记录到log_GL.out文件中。以下是摘录的一段。7 P" J! Y3 ]* |0 w; |6 Z
我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。+ z0 o7 P. M, \" G- m: g4 l
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
! e8 O1 f- D  `
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>, o) F( i" O( G! {. i# {
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    % N6 r9 `' u! `. f
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>! a9 P9 T3 u1 C4 l+ C0 j: ~
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    , A. f" K5 q2 ?8 m
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>) o5 [* t# g& i7 {6 ?0 w
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    ! ]! x. f8 B; \' |
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>8 ~) I3 i7 h0 e
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    9 o) W( A, c/ I
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>- l6 R1 u& U2 w( F9 I5 p
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>$ H7 s+ q$ n$ r/ e
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    4 [! f& u7 E- p! @
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>9 D4 k) g/ y  o  W1 l- u3 O  Y
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>( Q& n, T7 ~8 `' Y% c
  14. glClear, GLbitfield<256>
    / G$ K5 T' a% D* d
  15. glShadeModel, GLenum<7424>- U+ ~6 ]. L# K
  16. glDisable, GLenum<2929>
    8 M) z4 [3 f% H! A  u" M1 A% c
  17. glDisable, GLenum<3008>
    ( n! Z$ U6 o2 F% v$ }! J) `& w
  18. glDisable, GLenum<2896>/ I, [% `4 [# `$ s2 R! Y
  19. glEnable, GLenum<3042>
    . q/ K$ L/ A# K, I
  20. glDisable, GLenum<3553>( g# ?% ~* q7 I9 z# X
  21. glBindTexture, GLenum<3553>, GLuint<631>( Q3 A+ ^" N2 B
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>1 X1 l" L# K& _& B- W5 K" a$ v) B1 \. T& i
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    $ ~2 o8 G, [& A' V8 H- W) d* _& s
  24. glClear, GLbitfield<16384>% i5 X5 y# Y! ?# i
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    9 ~$ J, e/ e! C( u
  26. glEnable, GLenum<3553>
    6 D2 _/ j& T- B- T( V% I0 i% R
  27. glBegin, GLenum<7>
    / m- f' ^1 B+ r. q( s7 d) C
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>& b! o3 @: s2 H" Z- U/ O
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>
    ( e/ b/ Z5 A  C6 C; b
  30. glVertex2i, GLint<0>, GLint<768>  M" b7 a0 }+ O" h/ I5 ^9 U( n' n
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>" M$ E& e# O% C. |
  32. glVertex2i, GLint<1024>, GLint<768>( Z+ d6 e+ F$ S' J) _
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    1 n' L2 j8 P7 A1 K9 ]7 k  ]
  34. glVertex2i, GLint<1024>, GLint<-256>! [3 m8 \! {. Q/ ^# p% d. F5 W
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    + J/ F! r) z. R  y( g# q
  36. glVertex2i, GLint<0>, GLint<-256>
    % N$ A& j* [7 [% M3 \; t! P, h
  37. glEnd
    & z- b% A" L: r9 h) x+ a8 a( t7 ^; V7 u
  38. glShadeModel, GLenum<7424>
    , T3 F# Y7 w) g) m3 h5 U
  39. glGetError: ~( Y7 ~! \& x9 @$ v0 P
  40. glDisable, GLenum<2929>" c2 l5 \! ~1 W# ]2 ]0 ?3 y
  41. glGetError/ A& B# D! \$ T
  42. glBlendFunc, GLenum<770>, GLenum<771>4 N, l; l$ Z# w+ @% N( x
  43. glGetError
    ' ?% a6 d& }5 ?& H
  44. glEnable, GLenum<3042>
    + A1 f, Z" s8 ?2 o
  45. glGetError
    + E4 A# n' Q: r1 X# i9 e
  46. glDisable, GLenum<3553>
    1 J( l4 c) ~8 z
  47. glGetError8 G( s+ i' _7 y; t+ \; S
  48. glBegin, GLenum<7>& J' s5 |" i2 X4 i
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>9 s" \. Q1 x* e) ~2 A
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    9 Y0 O5 g! m6 O1 C
  51. glVertex2i, GLint<0>, GLint<768>' P* ^, {+ J$ v3 n1 C- B, n
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>' d: }4 `- ]  h7 J2 Q. x/ C1 {, c
  53. glVertex2i, GLint<1024>, GLint<768>% }: [( V" A3 ^9 |
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    4 H, E8 i6 _6 g/ h: G
  55. glVertex2i, GLint<1024>, GLint<0>
    2 i7 E! o; e; H8 D4 \6 G
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    , }, f% E9 v  X; n. I
  57. glVertex2i, GLint<0>, GLint<0>0 H4 ~# {0 Q, u' \
  58. glEnd
    ) d- V1 ~, e0 z, `
  59. glGetError
    6 E, F8 R+ X4 f+ V- N$ D
  60. glEnable, GLenum<3553>
    1 Z1 S( l, E  ?# ^
  61. glGetError
    9 b8 i8 X) S: B
  62. glFlush
    7 j, G2 `2 G9 M  o& A7 Z2 n0 o
  63. wglSwapBuffers& Z1 G/ H1 G+ {% u2 K
  64. ---------------------------, N5 y  i( n" U) j3 u' B
  65. , HDC<-33484711>
    $ h( ~% [5 d3 [3 z# T
  66. wglGetPixelFormat, HDC<-33484711>/ D- `& P2 I0 x" D
  67. glMatrixMode, GLenum<5889>
    + j. [1 Q) t, u5 u
  68. glLoadIdentity
    ! Q& |, d0 k6 E/ B! t
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>5 [8 p6 `  \% N6 K3 W$ }
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    1 @- [1 T) q6 L0 r  g# M
  71. glMatrixMode, GLenum<5888>0 h; v# D9 [& Y# m& d( b$ [& Z
  72. glLoadIdentity
    , V) e* V- F9 P/ y6 Q
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>
    ( [" D; N* P# K1 w& ]) ?3 V
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    , _+ c) U+ S  }" [+ y+ b& D
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    # ]9 a$ I! h9 r2 R. [2 V
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    6 J( N" B+ Z- O% }  C
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>2 D: N$ I4 k, n/ I
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    / G- W3 |8 j  F; W* U% t% n
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>5 J1 m; p0 L3 }/ \8 `5 v  s
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    * V' j' y+ M0 Q! y# F4 U
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>4 O  N; t. k. }* |
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>4 ]- n1 s2 P& A% A* M. @( N
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>8 V, d. [. E5 S+ Z
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>$ u6 X# h+ `% W- t# e0 O$ B% w
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>% c9 p6 [' \! C0 W
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>' P6 c2 D& f6 v$ ]2 t
  87. glClear, GLbitfield<256>
    4 Y$ V3 ]; a% g( X2 F" F
  88. glShadeModel, GLenum<7424>" y$ S" o; y  y9 T
  89. glDisable, GLenum<2929>+ K/ d' {* k8 z- c: i4 o- H
  90. glDisable, GLenum<3008>
    ; {% G! t, V  ^+ A% S0 o9 M% d' j
  91. glDisable, GLenum<2896>6 V: q5 L3 J+ i/ F! ?. r
  92. glEnable, GLenum<3042>% Z" [/ A: U8 F8 n7 i  e  C
  93. glDisable, GLenum<3553>7 H; \# f! O0 p$ ]1 A* s. G9 U
  94. glBindTexture, GLenum<3553>, GLuint<631># i  O$ c: Y+ A" h' q8 P
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    ) n4 F1 l8 l. y, j! s
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>. I8 B4 m+ y/ o" B
  97. glClear, GLbitfield<16384>! ]2 K. N' r3 `6 Z% @/ g# Z
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    , V' G8 c2 \! U+ B
  99. glEnable, GLenum<3553>
    8 l% |: n! ?( Z2 @  A; @+ J+ @  {
  100. glBegin, GLenum<7>
    ; Y5 d9 T6 g7 I" h
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    ' z( U7 E8 R2 N( d
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>
    & {8 L  s7 [6 B) p
  103. glVertex2i, GLint<0>, GLint<768>
    " [! ]$ [7 }& y
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    : O4 ^9 R5 W: Y. L4 s
  105. glVertex2i, GLint<1024>, GLint<768>: b& n$ J* s% \# @
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    4 I7 N6 M4 m$ S5 W
  107. glVertex2i, GLint<1024>, GLint<-256>0 a1 [6 f4 f' w; X+ u
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
      p7 q$ j" ~2 u3 p; u
  109. glVertex2i, GLint<0>, GLint<-256>' {; c2 e" B% s  Z; `+ c
复制代码

; J+ i6 b* I3 q( `, t
" j& _& @# v" s" r  V
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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