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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑 0 c5 G) _  l3 C$ T1 U; M5 ?

' v  ^7 O2 g; {6 O4 k* @& I本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,- I5 Z9 o% p; A, \! w3 D& o
游戏应该实际只用了其中1个,暂时作下记录。+ q+ X- m6 O( o( t2 O" B

6 C  [. H# C0 W# n+ Q' w5 A. ^; e% EDirectDraw是由bin目录下的ddraw2d.dll来完成的。  y4 x$ r; `4 u2 U9 e! H
以下是一处的初始化代码
- q& _( d* E& U7 B& B* w6 W
  1. CSpace:100150153 U0 K3 f1 v  V+ e, \' R
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j. N5 U2 J. W( b
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0
    7 R0 j) h1 {  x+ w8 S
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]  r7 h* s! }1 Q- V( E
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    , P2 `4 z% i( ?0 [3 p& ?
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]& ]- y" n! V, U: ]9 r& v' |
  7. CSpace:10015029                 test    edx, edx0 }7 e' J0 h" j: d( R  ]2 R8 g: _
  8. CSpace:1001502B                 jnz     short loc_1001503C! J  [7 _4 v+ l4 V
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]! S7 J4 b! a  a9 e: z  U9 ~
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    9 i; F) M. b. P+ l
  11. CSpace:10015036                 add     ecx, 8
    2 O7 f3 `3 y' R2 k' F
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx5 w$ [( s7 l# t7 P
  13. CSpace:1001503C+ [6 \1 q0 u( u' ^
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    " N6 a. o6 T5 Y+ h) }; R! D
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]* q9 r: u3 I( |" @/ {9 O
  16. CSpace:1001503F                 mov     ecx, [eax+230h]
    8 i- [6 O5 \9 K* f
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    4 j$ d- |3 \" \3 K5 c7 ^
  18. CSpace:10015048                 push    edx
    0 W! u. r& q! ^; c4 c' H# a/ i$ a
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]! O4 \: E: s1 p2 {5 q4 Z: J6 I
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    7 U2 q) U/ Y' h6 S' h
  21. CSpace:10015052                 mov     edx, [ecx+20h]2 z3 C4 ?, L4 V+ N" a1 G, M
  22. CSpace:10015055                 push    edx
    6 ^# I$ u8 o- c4 m6 S5 a2 ~
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)"
    3 V6 N- }9 h( Y& m- o: F) ?8 k2 @" B
  24. CSpace:1001505B                 push    3
    5 C7 {$ g0 c, u2 k0 v8 y
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    % W" {" x9 w1 `# H9 G5 L
  26. CSpace:10015060                 push    eax4 H: Y9 n6 J; {$ ^
  27. CSpace:10015061                 call    sub_1003882A6 i# I( N2 N) W: h, I
  28. CSpace:10015066                 add     esp, 14h
    $ q0 L$ `! E( Y- U6 x4 T
  29. CSpace:10015069                 push    0               ; pUnkOuter$ {1 [# j9 ^* Z4 i  o4 z3 @
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]" b4 F1 j0 B' J/ r! }
  31. CSpace:1001506E                 add     eax, 1DCh  F& ~6 g* H/ }: q/ D" P4 b7 x
  32. CSpace:10015073                 push    eax             ; lplpDD
    2 q+ q9 N9 W2 G$ k
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]7 F9 ~8 H& _( ?& T' O4 \# O
  34. CSpace:10015077                 push    ecx             ; lpGUID
    4 ~4 h4 R. ~: v8 i5 {
  35. CSpace:10015078                 call    j_DirectDrawCreate
    4 N- Z$ r3 x2 D/ }, Y) U- k: h4 l
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    % W, q; U3 q. p
  37. CSpace:10015080                 cmp     [ebp+var_14], 0
    & T! C  d6 C8 `* C
  38. CSpace:10015084                 jz      short loc_1001509E
    * w& C8 j; D/ g, D  {! ]
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    ) p. W$ t2 w& `
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    : R+ m+ G' A/ _2 b# q
  41. CSpace:1001508E                 push    eax; D. m9 y' q" |, B, c* z% ^
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]1 {- c- H) A3 P- X
  43. CSpace:10015092                 call    sub_10038F3C- N; p- k- J% Y9 R
  44. CSpace:10015097                 xor     al, al
    9 Q2 R! C! @9 p9 f' a! x. C
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
: p6 m3 o! g& G# E; [& V
' _! }* h) G" B- M% t" }: W

2 D9 E' ?" n9 v6 z* o* g我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
' p; l, i* ~9 t. g0 f0 E记录到log_GL.out文件中。以下是摘录的一段。
, a4 o3 Y" X; n9 G) s0 H我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。
6 z! o6 r; R4 U) w- }2 ]% D- s$ g以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?% C- Z+ p7 P6 J' ^
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    5 d8 n+ P5 N: @/ G! ]
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>
    $ i9 D$ B2 g5 g' M( [
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    ! j" V& W* V4 z) c" |
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    * b9 D+ R1 Z' ^$ Z
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    2 z2 l9 ]* k' t! F9 r5 [+ H% q
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>2 M) s2 S3 |0 E
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>7 D, O- K  _! [. f; b. Q
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>2 b$ `) H2 Y! K1 J% Y
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>' P2 K" \1 I( @. a+ Y, U
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>  |9 e2 e$ C0 m; ]
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    9 i  f( Y9 Y1 m  X4 n
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    9 n7 V  T/ W6 w# W% b" w
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    . c$ u* D3 q" I/ B! [; Q
  14. glClear, GLbitfield<256>
    $ z5 |' F# c- [9 B; L
  15. glShadeModel, GLenum<7424>
    1 r; n: Z6 p! F: ?- H8 [
  16. glDisable, GLenum<2929>
    4 M: d3 Z+ [3 e" V+ B& s
  17. glDisable, GLenum<3008># K* w- l; \/ u& R3 j
  18. glDisable, GLenum<2896>
    + F+ c" I  `) `
  19. glEnable, GLenum<3042>6 W" p# ~8 M# e; n8 T( G
  20. glDisable, GLenum<3553>9 F9 T. z" L. U* T4 \5 W
  21. glBindTexture, GLenum<3553>, GLuint<631>
    # Q( B" p1 f& q1 T( k0 s
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    0 a  q4 n- S) |# C: T6 [
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    0 q& \& G% y' b: Z0 l! K0 F. R" h/ D
  24. glClear, GLbitfield<16384>) ~- o$ M0 H- H/ E
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>& ]* B" T8 t: q6 N/ ^
  26. glEnable, GLenum<3553>* ^3 l$ b' ?8 v1 C2 ~  b
  27. glBegin, GLenum<7>) V4 m$ a( w- Z, G5 `
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>9 L% G' K' [0 ^% p3 q0 m2 U
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>2 o/ @. b0 j& P; S. Z
  30. glVertex2i, GLint<0>, GLint<768>
    5 |4 J5 g8 p& m/ K
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    8 s7 q- K4 ~9 M2 r- d) F
  32. glVertex2i, GLint<1024>, GLint<768>
    ' x3 n; e( ?: N3 v5 w1 t: }; p  O
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    9 I" I, ^. M+ x
  34. glVertex2i, GLint<1024>, GLint<-256>+ @& C' b0 H7 n* A' K- B/ G
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    % M2 A9 M7 q4 V' Y8 [
  36. glVertex2i, GLint<0>, GLint<-256>, R- g/ \. P+ _, u/ C& p# [
  37. glEnd
    4 t% p" t7 [" @9 Z
  38. glShadeModel, GLenum<7424>7 E* V( v4 x8 G# @
  39. glGetError* a% s! I0 b. w$ q
  40. glDisable, GLenum<2929>: h- F8 u. ^# f* Z+ N4 G
  41. glGetError
    5 ]4 b4 S* a( k( X2 P0 Q" |
  42. glBlendFunc, GLenum<770>, GLenum<771>2 @* k2 P4 U( L" U# k$ {8 Z. d
  43. glGetError9 ?$ a# a- L  d7 q9 |: g5 v
  44. glEnable, GLenum<3042>
    9 b( |6 N; E4 b* S+ S
  45. glGetError
    7 [" [7 U* H6 u3 m
  46. glDisable, GLenum<3553>, z8 `% |& v% C  u9 B% V5 X, w* E
  47. glGetError
    ; `. x8 N6 r6 q- `
  48. glBegin, GLenum<7>
    ! b- _: l, G3 r' I6 N. u- A2 l
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>
    ; k# ^# T! Q. a/ V. E
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
      B) o& f& N% X' t  w
  51. glVertex2i, GLint<0>, GLint<768>
    & N/ R- \4 I( J8 C
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>. l; i0 c! b7 U
  53. glVertex2i, GLint<1024>, GLint<768>
    9 E2 t+ F8 x1 f1 |1 G
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>8 p& Y0 T0 R% P; c# c7 }6 N
  55. glVertex2i, GLint<1024>, GLint<0>1 d! q0 ~/ M( z
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>* t9 y$ w9 y& e# ]4 g" G( l
  57. glVertex2i, GLint<0>, GLint<0>
    # e$ V5 f2 L, @8 I$ @' n- X, }# l4 w
  58. glEnd9 l% g7 \( v9 U
  59. glGetError
    9 q" z# P7 u+ m1 {9 T
  60. glEnable, GLenum<3553>: Z# j1 ~; V1 ?# s
  61. glGetError% F7 [- P- Q5 E; ]3 c- B
  62. glFlush6 I+ L, t! I- Z1 e
  63. wglSwapBuffers
    & Y; L2 e$ e6 b  j, j
  64. ---------------------------
    ) ?0 R2 x- S; E7 z
  65. , HDC<-33484711>
    5 {) |: |" k" o
  66. wglGetPixelFormat, HDC<-33484711>
    5 R3 |. p* N! v) i0 X
  67. glMatrixMode, GLenum<5889>
    + C3 d* ]# O6 a: L
  68. glLoadIdentity
    7 H; K0 N: D" N- a; |: N& M4 H: I
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>4 ]: j/ ?& G# m- b
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>  q. d; B/ L. M$ _+ x- P
  71. glMatrixMode, GLenum<5888>" p% v, H( D) Q0 `, R
  72. glLoadIdentity# m9 ?- w( l+ \8 b3 i' D
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>5 `) _$ X7 p8 b+ i; S; c: b) A
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    6 P1 M/ t  @) F1 x- q; H
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890># i2 I3 W7 d0 V2 l; K/ d8 C' ~4 ?
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>" ^8 T/ h" y$ A
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>) n: A; m* s3 q
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    4 N2 Z1 E& h& v) g
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    . P9 f% k+ p+ k& B2 h& z
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>  C7 k5 P) g$ b$ e2 j/ o0 ^
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>
    : W2 p7 B# U0 f5 K5 G8 k
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>+ M+ V3 ~# W+ l7 {' E* |
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>- y& ]$ N1 I3 v/ z! [, r
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
    2 A! D8 L2 J. A
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    ) b; K6 H% \4 p$ M8 j
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    ' L' J9 q2 I) E; |- B
  87. glClear, GLbitfield<256>4 o$ W5 I& n0 k$ X
  88. glShadeModel, GLenum<7424>( P  A+ k) r" ~
  89. glDisable, GLenum<2929>
    * k  f' F/ k9 v* c# K& x! ~5 z) H
  90. glDisable, GLenum<3008>& l. o1 y# G7 u! a/ Q  A
  91. glDisable, GLenum<2896>
    6 t$ ]" e3 k0 g/ C8 h
  92. glEnable, GLenum<3042>8 H$ r7 E* ]. L8 L0 v' e
  93. glDisable, GLenum<3553>
    ) I: z" |* W& P& W+ y
  94. glBindTexture, GLenum<3553>, GLuint<631>
    4 T" v$ j! v; Z" G( \8 E
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>
    , I% C" ?. a" _* Q! y% s6 h5 R
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    / ~2 G' h- X3 |; j: T% `
  97. glClear, GLbitfield<16384>
    % F( N* N- R  F+ U4 E
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608># l+ q+ H  y& d- t9 S
  99. glEnable, GLenum<3553>
    # {0 s2 k, o1 p
  100. glBegin, GLenum<7>
    0 f2 j2 @  c0 ^8 x2 D8 m" p  V
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>0 l( S6 b, ~( \% N  E1 w0 r, d
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>* y* o" f9 b3 A% O  j2 C4 ]
  103. glVertex2i, GLint<0>, GLint<768># S+ i7 u  P8 f- g7 r5 {
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>% L; d' U7 {; y2 L1 B
  105. glVertex2i, GLint<1024>, GLint<768>
    * u% p& j, f6 K: o3 F# U: e
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>* S/ ?3 A% j" z
  107. glVertex2i, GLint<1024>, GLint<-256>
    , f0 Z: X; h: L# d2 u
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>
    2 ?& T, v  q! N
  109. glVertex2i, GLint<0>, GLint<-256>
    ! V& ?( O5 M" S( \
复制代码
5 W& |+ h7 g  e* g/ ?* q7 x
" O$ ~/ e3 H5 I, }" F' \
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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