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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑
+ Q+ E/ ]9 K: V$ {% t/ z# ^2 G1 i; v3 Z" N9 d) V5 W
本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,
, y6 ]/ n* {- J1 r. f% a7 X游戏应该实际只用了其中1个,暂时作下记录。
+ O- a3 k! J1 `6 [. n% B5 Z" N; h4 k; y3 C9 a' ]
DirectDraw是由bin目录下的ddraw2d.dll来完成的。
$ o3 B# W! z9 j以下是一处的初始化代码
, U* o# V8 e+ X! C* a
  1. CSpace:10015015
    ' B* p, n. O+ h) c, v
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    / T! b# |) e1 w5 h* Z
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0( T& V) V( H7 D: b7 e
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]
    ; k9 d) c2 y) z7 N% \5 U# H
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    ( A3 L" i* L; F3 `$ L
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]- `. M% W0 h& @9 m
  7. CSpace:10015029                 test    edx, edx8 a# s0 d+ [$ N1 M2 h5 w- T4 m
  8. CSpace:1001502B                 jnz     short loc_1001503C
    % @3 E/ V  D8 I1 b# K% N/ ]; C" p1 b
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]
    # K9 `7 z$ v4 n5 V1 q: w7 j
  10. CSpace:10015030                 mov     ecx, [eax+230h]* w$ O: c0 ~! f' {- q4 f  ~
  11. CSpace:10015036                 add     ecx, 8  n. w9 y/ E7 r; o1 a
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    2 t& `: }. E+ J0 U$ t3 \" `: Q
  13. CSpace:1001503C9 `0 |6 K4 e8 ~- Z8 }
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j4 u( l0 ]9 i( y! t6 b2 ~3 x
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]; \' q2 U9 f7 S, Z* m
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    8 t. R# D$ n- p. E( x6 n
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]* M' g4 ~) N# U
  18. CSpace:10015048                 push    edx
    9 e5 w" c! h) M( O2 R2 E0 g
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]& Z' z6 T' }7 w6 I4 s
  20. CSpace:1001504C                 mov     ecx, [eax+230h]4 [# A9 `, m; m) }
  21. CSpace:10015052                 mov     edx, [ecx+20h]) M" Q0 U  ^& L- i
  22. CSpace:10015055                 push    edx
    ' ~: \+ a/ R: I
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    , K1 P5 Z" U) B# }3 ]$ `7 Z
  24. CSpace:1001505B                 push    3# E: M+ x9 G3 [6 F
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    ! s3 r; `0 p! J; \: e% O
  26. CSpace:10015060                 push    eax+ o1 z* Q* `8 g& L
  27. CSpace:10015061                 call    sub_1003882A& I& a) |& Y% Q+ s
  28. CSpace:10015066                 add     esp, 14h) v0 D+ ]1 I1 h- o' j- S
  29. CSpace:10015069                 push    0               ; pUnkOuter  b: `9 }7 {/ w4 a! |9 }' D
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]* J' B6 X( t9 L4 A( @& t
  31. CSpace:1001506E                 add     eax, 1DCh
    ' G: E6 W. z. S/ O
  32. CSpace:10015073                 push    eax             ; lplpDD# \+ T- P3 s. Y/ p3 s. T6 r7 \, @
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]! [- R' O% |  S
  34. CSpace:10015077                 push    ecx             ; lpGUID
    5 H' z5 \( @3 `, u0 @& V# S
  35. CSpace:10015078                 call    j_DirectDrawCreate
    & L  \/ z2 C, k7 |/ m; n
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    . r* x" t2 u8 w) k3 M, }8 m
  37. CSpace:10015080                 cmp     [ebp+var_14], 0, ~+ G' q4 k* a' B' f0 G
  38. CSpace:10015084                 jz      short loc_1001509E
    3 F# y% X' E2 T6 ]" s. c9 I0 \' a
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"# R2 D  [( p, t2 ~; r! o( }% y) S1 K- E
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    5 `  m( v( H* w8 A3 }3 F5 R
  41. CSpace:1001508E                 push    eax
    * r; C" l6 H: d& Z7 b- l% b9 \
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]. p* L' i8 F# Y' e. r2 H& C! f
  43. CSpace:10015092                 call    sub_10038F3C9 j7 k; P) L! G/ E
  44. CSpace:10015097                 xor     al, al
    & B2 b8 B1 O5 c; D$ P  }1 g  E" A* _
  45. CSpace:10015099                 jmp     loc_10015173
复制代码

9 [' o; M. f5 c- F2 ?7 P/ {9 I7 Q. l- {3 i7 s
. g. D4 Z# r" ?& j7 V
我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log., t/ a0 i' l( `4 Z9 ~* t9 B
记录到log_GL.out文件中。以下是摘录的一段。
8 \2 T8 i( L2 g2 M我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
2 k/ l* J. `6 N+ x9 P以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?% Z  ~6 r+ A) K7 E+ n
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>* f3 q& h5 x# ^) d( m
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890># S* T3 {0 `, V6 x) ^/ ]
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>+ T8 j4 r8 {, ~% _
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    ! J- {+ {( ]* ]- I2 Z9 K, [
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
      g; d& [& ?* I$ A
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>2 R+ W+ H+ e0 @3 z2 I" k
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>& Z5 ]$ C. n. g& ~- D  M8 y
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>' ?" `4 b6 ?+ c, j
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770># L9 x7 J5 l3 D! n2 D' a& [
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>! ^- X6 f$ H( k0 m+ n3 F
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>, Y! I3 C0 \2 X9 [
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>: a; t% I: C- O1 A
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>) Z9 ^& j( z/ ?- x1 ^
  14. glClear, GLbitfield<256>, y4 M: Q) n  d7 X& E3 m. E* h
  15. glShadeModel, GLenum<7424>
    8 @* }/ [3 x9 ~4 I4 H
  16. glDisable, GLenum<2929>" C' d5 R- W+ W# M1 B
  17. glDisable, GLenum<3008>
    & B' I, ~3 A  M& z3 _! c. f
  18. glDisable, GLenum<2896>( c; i: _& l! V% Z; [
  19. glEnable, GLenum<3042>: U+ \" i' G, ?# v( V; k
  20. glDisable, GLenum<3553>
    7 K1 T) @5 E  W* B0 F
  21. glBindTexture, GLenum<3553>, GLuint<631>+ k& v3 h7 ?( y+ J) h* o
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>8 w, E: z: C( Q; o( w
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    " ?* \- q- [% u" s# I: I
  24. glClear, GLbitfield<16384>& K- f! P. V& u- O( k0 [  Q
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    6 T" d+ K/ h9 A  J$ j4 C6 L
  26. glEnable, GLenum<3553>2 E4 y1 C: @% t+ g
  27. glBegin, GLenum<7>
    & C1 G8 q5 ^8 K. W0 ?( j
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>2 o, |( k4 `0 l9 e3 t
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>3 l5 u& e: V/ I) L1 v
  30. glVertex2i, GLint<0>, GLint<768>) v6 |2 `  @1 Z* {/ f- R' ^' u( c
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    4 G- ^- A" u* W! {9 H) ^1 ?
  32. glVertex2i, GLint<1024>, GLint<768>5 E3 K2 ?/ p, _! I0 F) r& D
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>2 d; C0 _- L) h: S
  34. glVertex2i, GLint<1024>, GLint<-256>
    7 w/ T3 g9 ^8 w( n
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>6 J5 a% t& z8 p, P5 K
  36. glVertex2i, GLint<0>, GLint<-256>
    ; C% t. g" h; B' ^, S
  37. glEnd
    8 h4 G9 z4 X# `6 q& j
  38. glShadeModel, GLenum<7424>
    * W) J% ?* G( \9 P
  39. glGetError
    . S! L6 o3 v, H$ s- l) A' w, U
  40. glDisable, GLenum<2929>4 U: a( ~& d  X' G  w+ n* R! T
  41. glGetError
    9 f$ s0 Q$ D- d/ }! k
  42. glBlendFunc, GLenum<770>, GLenum<771>) N5 N( H) L! p: W, B, S' H" |
  43. glGetError
    2 o  Y$ m6 P  r3 g
  44. glEnable, GLenum<3042>
    8 h, j- a9 p! b% S
  45. glGetError; _, [' r2 [$ q( g, a
  46. glDisable, GLenum<3553>2 f% @% S% I8 n( N0 ?4 k
  47. glGetError
    ) i" g3 M' }' e/ v) B* d% j
  48. glBegin, GLenum<7>
    0 f) X% x" b2 s/ U/ H9 \
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844># k6 p! V$ O! `3 d* R
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    + i; Z* m: L5 q! \/ y3 w/ u7 ^
  51. glVertex2i, GLint<0>, GLint<768>) |+ N9 [1 C( }
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    6 _% ]2 K  w, e. ~. E. \
  53. glVertex2i, GLint<1024>, GLint<768>
    , Q$ g9 E/ b/ A/ g8 t
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    % }- H9 ?) F  o: A; g
  55. glVertex2i, GLint<1024>, GLint<0>' |7 w, ~! `: c# }  L
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    " }" Q1 H% L! b: `& X
  57. glVertex2i, GLint<0>, GLint<0>
    . k) }: q9 E2 W/ F& t) K+ K# r+ |" [
  58. glEnd
    ! ?: p7 A' t$ u! t4 w# A" V
  59. glGetError
    / q3 L" u. ]5 b7 a0 Z1 o$ F
  60. glEnable, GLenum<3553>
    , ^& t  h* ]/ ^4 p9 U
  61. glGetError
    . Q3 o) K* q6 Q0 F% |3 L- n- G* ^
  62. glFlush& y6 o( D# R3 @& o
  63. wglSwapBuffers
    6 v* x) x3 o4 T( B6 c7 t
  64. ---------------------------2 C2 G* l0 C; w3 F4 w3 S- _
  65. , HDC<-33484711>: z5 p' A' P9 ~: @+ u+ F2 I. r
  66. wglGetPixelFormat, HDC<-33484711>$ n% r+ x# X3 d  c) J. [& t& h: k, l
  67. glMatrixMode, GLenum<5889>/ A( l* j- \* y6 s6 P( d( p
  68. glLoadIdentity
    ) ]3 e; g. k) N; t
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120># ~) U) Z- I$ S  {1 l" c4 S
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    5 s6 s3 G# h7 r- H+ N
  71. glMatrixMode, GLenum<5888>! n  z, g1 N' H  Z& W+ l- C
  72. glLoadIdentity
    3 y1 ]+ x1 b% Z3 H3 d0 [( q
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>& X! F# E% [/ X+ |( a! W
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>( m( [0 H4 `$ R3 q+ I
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    8 R: W8 ?2 x) Y7 P% L( y* m9 K6 U
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    4 y; V/ ?2 v+ c1 }" B) Y0 B' A
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    * K- f- y& g$ M
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>' K+ T) G8 M* W2 z; u6 V
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448># v. s0 V5 a* K
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>. X" y0 h8 k' q( A4 {4 g
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>0 I  }; |% U3 R1 W3 G
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>3 b" s9 O, `9 ~9 i) \
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>7 n5 l8 S- {( I1 O8 R
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    1 `# G) O; j# I( W
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>$ W9 V" r  E! T- e
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    ( t4 y" V" u, ?' |
  87. glClear, GLbitfield<256>+ ]* K# P* p+ G1 k9 Z. r1 S
  88. glShadeModel, GLenum<7424>
      d$ x" V0 Q2 ^* v6 P: }3 \% s  B
  89. glDisable, GLenum<2929>: t* A4 L$ W, r6 i* X
  90. glDisable, GLenum<3008>$ ^6 L6 L$ d+ P
  91. glDisable, GLenum<2896>. ~/ H! V, Y. W/ }- ~' x
  92. glEnable, GLenum<3042>
    5 R$ S8 A% F% f' d5 i6 w
  93. glDisable, GLenum<3553>- h  o$ o2 m8 H6 n3 A, T  g
  94. glBindTexture, GLenum<3553>, GLuint<631>
    - R/ H/ H7 O$ K8 m* I+ I; u+ p9 C) D
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    1 Q4 `6 Y' d1 m- t! C1 y
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>+ @; p8 ~  g. ]
  97. glClear, GLbitfield<16384>1 s/ g/ q3 n4 c- L1 d. q9 t6 r
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    # T2 w7 {7 H' F. d( t- ]
  99. glEnable, GLenum<3553>
    5 F$ o; {7 [* O) n! j
  100. glBegin, GLenum<7>
    - k5 A$ @( F7 o: z! w3 T
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>2 W* h3 v# b+ S& ]4 {0 _+ W
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>" n2 V, L3 x6 w  h% N/ ^/ U% W/ q
  103. glVertex2i, GLint<0>, GLint<768>* g$ [1 w  R, U" m$ j
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>* D2 N  D+ ^9 u: C! e4 u) [' [
  105. glVertex2i, GLint<1024>, GLint<768>, J7 S' o% [$ {& F1 h. n
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    8 {& Y& m6 G1 j# K
  107. glVertex2i, GLint<1024>, GLint<-256>
    & a% I9 q) B5 ]. ?* v0 K6 r4 S
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>5 V+ E- ~- R. V. n1 N5 N6 y
  109. glVertex2i, GLint<0>, GLint<-256>
    . F9 Y/ i) z9 M& y
复制代码

  E' y4 y! H; h2 m% J+ f& ^0 h( P$ v% T" D- w% m7 W
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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