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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 * ~( y* k/ V$ P& F" }) N; J, x; Q
% `% A% W: d9 X4 ~- E
本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
& S* i. ]- j7 l" a5 t游戏应该实际只用了其中1个,暂时作下记录。& |) r( t: |& R5 ^8 Q

* ~# |  |6 F3 m% dDirectDraw是由bin目录下的ddraw2d.dll来完成的。, W* y" }; d. a7 c! o6 P
以下是一处的初始化代码
3 i3 a4 l( Z6 G
  1. CSpace:10015015
    0 t* A% d( ^: N' l3 g; x
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    ( s! X5 t7 J& Y$ z
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    % [. @1 G- }' ?* T. |; {, I, r' K
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    + g2 M$ v* u) w
  5. CSpace:1001501F                 mov     ecx, [eax+230h]% Q, U, l# |+ I2 z4 K9 L  o# y
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]
    ( G! [' h& i/ i0 Z6 E( T
  7. CSpace:10015029                 test    edx, edx* k# Z# v6 O+ S% k) x
  8. CSpace:1001502B                 jnz     short loc_1001503C7 A% c; F3 M3 k) o
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    9 {! r4 a$ f1 v; O% D
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    # w. Z5 U# Z3 B4 W; S) i. H/ x/ G
  11. CSpace:10015036                 add     ecx, 8: x# P, }8 Y% ?  t5 @1 k
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx* I$ d$ A9 C+ T
  13. CSpace:1001503C
    0 }% S8 {7 [5 Z/ b9 |8 r
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    9 w! o; d- z5 T5 V2 h$ \, `
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    : P$ V8 m( e8 v
  16. CSpace:1001503F                 mov     ecx, [eax+230h]7 G& R" u/ H& H  n
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]3 O; a' v* H* M! Y# m+ O8 T9 \
  18. CSpace:10015048                 push    edx
      d! C6 g$ m+ I0 E' V; u& k. m
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]
    . ^( H& m& X/ V: C' u7 [/ |
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
      x/ U- ~' \+ g1 j  Q
  21. CSpace:10015052                 mov     edx, [ecx+20h]1 Z* `4 h9 E! ], Z
  22. CSpace:10015055                 push    edx
    ; r& d$ F- x5 W7 M8 ?. d7 E7 J
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"- F+ |3 V, |: j" }  X
  24. CSpace:1001505B                 push    3% T+ a. d! E, ~* ?  X3 O
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]! g8 S- @  `/ r. p, u% d, B
  26. CSpace:10015060                 push    eax
    & f4 {7 F! _2 i5 I2 ^' X
  27. CSpace:10015061                 call    sub_1003882A' {1 r  k' J, [, ^. m0 l, {
  28. CSpace:10015066                 add     esp, 14h
    5 W% e+ W& K; c: Z
  29. CSpace:10015069                 push    0               ; pUnkOuter+ I8 X* Y: R5 k
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong], n  z# Y5 b2 `- f8 ?$ X! M
  31. CSpace:1001506E                 add     eax, 1DCh6 w( f7 Q9 L/ ^/ `
  32. CSpace:10015073                 push    eax             ; lplpDD
    1 Q. D# Q$ d! l
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    % t# W! I! \7 c! j; b" k
  34. CSpace:10015077                 push    ecx             ; lpGUID2 Z* W. X0 F1 p3 L& \
  35. CSpace:10015078                 call    j_DirectDrawCreate
    * k1 j; A9 h. L) e
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    3 A8 d& L* h2 h' X4 S
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    8 m0 @. m* Z0 _+ y) R; L
  38. CSpace:10015084                 jz      short loc_1001509E
    $ B5 c# C9 s; f
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    + h- L6 N( u3 T% h5 T5 ~
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]6 M; T- o: _7 I+ i" w3 y- B
  41. CSpace:1001508E                 push    eax  u' c: k! B7 B" A, ]
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]. Y* R; S$ h9 H! h
  43. CSpace:10015092                 call    sub_10038F3C+ K! {  x) p" P9 ]& {( W
  44. CSpace:10015097                 xor     al, al
    ( b# c1 i- O/ R- Z: R
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

4 M! y6 ^, R6 i7 G, E$ Y+ Q6 t3 z; ^$ n

4 }$ t3 m5 G6 h% ~! x- p" o. }3 q. U我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.7 u- v' c6 W+ \+ u3 Z
记录到log_GL.out文件中。以下是摘录的一段。
& a. {7 M+ V& y- t* t我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。- F7 v" K$ p  |( r$ g6 m$ q; {) I
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
8 r( j& r6 l% y0 q, Z2 |" c
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>) o2 e1 |% Y+ H, q  u; ^
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>" H% Z( M: q0 X" r3 p) H
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    % z  A7 g7 n+ U
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    # \' `, s6 r0 h0 Q
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    & R. Y; A, a* `7 J- i  E6 g0 Q
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    4 `/ q& z* V0 A
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    8 w) \$ K8 M+ g6 u, _: z# q
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>  P8 b; p, r: t, G$ x
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>6 v4 e& c% N9 u- _3 Z% K! y
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>
    9 `5 f, z" T) U# _
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    ! @) K0 N) q2 r
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>! i) ~* l* N+ o7 B$ T& P/ G
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    6 ]# u! ^" b2 R' m0 G
  14. glClear, GLbitfield<256>9 X9 O' p( r; B4 T, u' \. v
  15. glShadeModel, GLenum<7424>
    ! }) L- [# n* S6 p$ c
  16. glDisable, GLenum<2929>
    # \1 ?) r# Y0 ^2 T; t: J
  17. glDisable, GLenum<3008>1 u! b3 Y3 r- E0 S* n# ?3 P. Q
  18. glDisable, GLenum<2896>2 o6 k4 G! n. t2 ^
  19. glEnable, GLenum<3042>" P4 B! P* [$ ]* O6 ?
  20. glDisable, GLenum<3553>' ]# R3 {& [) n- {7 E% t  Z
  21. glBindTexture, GLenum<3553>, GLuint<631>
    - V* J( G- S2 Y2 ~. L' O# P
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>+ C5 e+ o; j; v4 Q' W
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    - Y' `) K( h9 \( g" x( {3 C
  24. glClear, GLbitfield<16384>- ?- G5 I0 K1 l3 c2 h) [
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>9 T/ P  g- a: A: O; j2 X/ j- O) n
  26. glEnable, GLenum<3553>  f: R% b# R* w) f
  27. glBegin, GLenum<7>
    2 _) A/ f/ B2 ?
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>- Z( [- ?1 T. n
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>3 }8 I0 u' [4 L4 S
  30. glVertex2i, GLint<0>, GLint<768>
    - a' W+ _4 T- T& y8 n' G8 K0 N
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>8 m% c0 h4 b3 [9 r2 \6 g
  32. glVertex2i, GLint<1024>, GLint<768>. v' `- Y" I# \% U# h7 s" k
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>6 X' k% W2 D1 A8 T# F2 q
  34. glVertex2i, GLint<1024>, GLint<-256>) o: t. N5 U& A6 V. h5 l
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    ; D( `0 D# ~- L6 l8 {
  36. glVertex2i, GLint<0>, GLint<-256>
    1 b- b$ o) K% m  S
  37. glEnd
    9 y4 {" J# f3 \% l6 r
  38. glShadeModel, GLenum<7424>* Y& {# _  \3 m1 z9 b+ d2 z" M
  39. glGetError- N3 o- \$ e5 p8 `& ~- o$ o
  40. glDisable, GLenum<2929>% c/ w% r, ?7 O) t* [
  41. glGetError
    $ s' l; f  q$ K5 Q% r/ R0 r
  42. glBlendFunc, GLenum<770>, GLenum<771>  t7 f0 k, t/ J& ?
  43. glGetError
    " P0 R4 }- `8 W3 K& w: L( y
  44. glEnable, GLenum<3042>, v0 w9 u# G1 u; R
  45. glGetError
    , Z0 i2 R5 U5 y& E
  46. glDisable, GLenum<3553>  E% T0 ]" J+ F( }5 }6 `8 |
  47. glGetError8 w# q$ s& O2 ]) ^' u7 ?
  48. glBegin, GLenum<7>' x' s5 m1 w9 s7 {3 U
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>& F; }- K# U1 J5 @# M
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>) v/ h: `7 ^1 H+ _) [/ Y
  51. glVertex2i, GLint<0>, GLint<768>( v# q+ o! |, ?% s
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>& z! f8 ~  L9 A
  53. glVertex2i, GLint<1024>, GLint<768>) o# w; }; y/ {  U2 A' d  O
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    # ^0 B8 ^3 L$ a6 t
  55. glVertex2i, GLint<1024>, GLint<0>0 h- j+ \+ T" n- u4 _7 j
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>0 r% Y) f$ B; o9 v8 U2 Y
  57. glVertex2i, GLint<0>, GLint<0>% T! ^2 u2 h( U" l  Z
  58. glEnd( f7 }/ c* `- K3 I' |+ q4 D
  59. glGetError0 ^  R2 L$ A3 t6 y
  60. glEnable, GLenum<3553># }" i! t7 f6 V2 e, Q
  61. glGetError
    6 \$ ^6 v# w3 `- J: j
  62. glFlush
    * R# m/ Y+ I; w8 R8 d
  63. wglSwapBuffers  F3 P+ N; D0 s( A; g1 N( H
  64. ---------------------------
    " @* [$ I/ p6 I% y8 D
  65. , HDC<-33484711>$ ~. c3 w% I* U' E
  66. wglGetPixelFormat, HDC<-33484711># d/ ]7 i3 R4 T- P
  67. glMatrixMode, GLenum<5889>
    8 d( |( p/ w1 q6 V
  68. glLoadIdentity
    8 g* P9 i0 X* t8 v
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>$ [. Z0 I+ s! \( N
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    . b' F  I5 W% ~; L2 F: ]
  71. glMatrixMode, GLenum<5888>
    6 e$ N9 @! N4 G6 [
  72. glLoadIdentity1 [& R  D; p+ E) U2 L
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>) i/ C' h5 h" t! l6 m
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>2 q3 @. u- @: k  t. Y6 s
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>( z9 x3 B! `( Y, R2 B' e9 i
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    / O5 _" @# n0 M9 a6 n
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    4 F7 C0 T( K* C9 R5 n( t. V1 f
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>0 p! D5 c2 q4 y7 k
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>7 r/ d. ~0 ]' d2 H6 [& B$ R  M
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>: I% Y8 j5 k0 b% ]
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>5 S9 r3 X. e4 m1 i" f4 `. @! V3 f$ c
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>& \. b) f$ a1 Z2 s
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>8 T! d1 {% j4 K$ ^
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    2 N( ~; [. i! h1 r! F+ x6 Y
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    * M. [2 y* @, _5 E
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>  X. ~1 t$ s* O" Y4 |3 K$ _; U
  87. glClear, GLbitfield<256>
    6 \" r5 v; @/ w7 \
  88. glShadeModel, GLenum<7424>) `' o6 d) ]4 q, T+ \
  89. glDisable, GLenum<2929>
    4 v- P+ q# N+ W/ a5 `
  90. glDisable, GLenum<3008>) i6 x8 S9 V2 U5 z" U& P' O& N
  91. glDisable, GLenum<2896>' C( q9 x: W8 P0 o* v  e4 D3 K( E
  92. glEnable, GLenum<3042>& b; j  w2 n5 D
  93. glDisable, GLenum<3553>0 G8 n7 P* `2 M2 D! ]
  94. glBindTexture, GLenum<3553>, GLuint<631>3 C6 b/ H! K5 o/ ~
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    9 b4 E4 a0 P  f2 K! o( a
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>% Z) f! m; z  t$ z4 N9 S
  97. glClear, GLbitfield<16384>
    2 R" \" D7 }( |
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>  u( D9 h: q! p* p2 u! ^; ~
  99. glEnable, GLenum<3553>
    4 f4 ?1 s; Q. h6 R9 K6 q4 J
  100. glBegin, GLenum<7>
    ( K" ~% `0 W/ N' g! M
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    ; _  j2 b+ X) v, ^8 N; e; ?* h, q
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>9 d, M: `, J! v* W! y$ }% e) t
  103. glVertex2i, GLint<0>, GLint<768>
    5 X/ ~% `3 m' m5 v% s* M0 d5 b! C" {
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>% F  l8 q% P" h4 Y8 K  a$ m( F
  105. glVertex2i, GLint<1024>, GLint<768>
    ) N& ~* g4 f% a+ ?1 ^
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    0 B+ E1 k7 B) N3 Q% p( q3 @8 j
  107. glVertex2i, GLint<1024>, GLint<-256>8 J1 o. I7 b5 E
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>4 O" z0 f; Z0 w; t2 v
  109. glVertex2i, GLint<0>, GLint<-256>
    , e4 D9 P& r: W! n
复制代码

% J. m. J2 `8 O# w1 w" A7 D" Q9 i( d
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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