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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-25 17:31 编辑
' v# \/ i3 a0 u4 h8 v; W' L, A
. K+ Y. l# Y2 a% n) g0 j# b本游戏的引擎似乎有支持2套图形API,DirectDraw和Opengl,7 D* P2 h" q  d7 J2 E; r$ |$ ?! [1 l
游戏应该实际只用了其中1个,暂时作下记录。
  L% n8 R8 J6 K# \+ B! c2 \
( B- [; l1 L# `4 W  rDirectDraw是由bin目录下的ddraw2d.dll来完成的。4 }* E, E) C$ A( K  [; U
以下是一处的初始化代码7 e6 n, e3 B4 c' f5 R
  1. CSpace:10015015
    & ?7 b6 q' r# Y" W/ V; h
  2. CSpace:10015015 loc_10015015:                           ; CODE XREF: sub_10014D50+2AD↑j
    1 r. s" _4 F+ O) _
  3. CSpace:10015015                 mov     [ebp+lpGUID], 0- o0 d# |, w) _7 T/ a0 d) l
  4. CSpace:1001501C                 mov     eax, [ebp+dwNewLong]; j  Q/ |5 o* v1 {4 V
  5. CSpace:1001501F                 mov     ecx, [eax+230h]
    2 {& D( A1 x( [# Z2 D% n, l* L4 y
  6. CSpace:10015025                 movzx   edx, byte ptr [ecx+1Ah]: ^0 O" Y! e$ y( c5 K% w
  7. CSpace:10015029                 test    edx, edx% H5 O7 C' J2 R$ [
  8. CSpace:1001502B                 jnz     short loc_1001503C
    , R* H/ d0 d; F' g* V
  9. CSpace:1001502D                 mov     eax, [ebp+dwNewLong]' |6 @+ _3 W. `* t; p! f
  10. CSpace:10015030                 mov     ecx, [eax+230h]
    ! ]: q% T- W0 ]
  11. CSpace:10015036                 add     ecx, 8( x5 o$ j& ?0 D; K
  12. CSpace:10015039                 mov     [ebp+lpGUID], ecx
    5 j: ~8 ~4 L! i5 M$ z( h, e
  13. CSpace:1001503C0 Z4 O* `+ B+ {4 n
  14. CSpace:1001503C loc_1001503C:                           ; CODE XREF: sub_10014D50+2DB↑j
    % t2 {- C& i8 `) m) T+ s0 x9 N+ o
  15. CSpace:1001503C                 mov     eax, [ebp+dwNewLong]
    . E% k4 G0 a# G$ k9 H8 `5 b4 {
  16. CSpace:1001503F                 mov     ecx, [eax+230h]6 B: G$ F" |' ]0 `+ x' n$ R, P
  17. CSpace:10015045                 mov     edx, [ecx+1Ch]
    3 @7 S: Y& O# ~+ a0 G' v
  18. CSpace:10015048                 push    edx
    ( I" r2 L: G4 S+ t4 p0 C4 L
  19. CSpace:10015049                 mov     eax, [ebp+dwNewLong]) a1 ~2 S1 N  a+ t) ?
  20. CSpace:1001504C                 mov     ecx, [eax+230h]
    6 Q5 S" o5 I/ k  _  D* f2 K4 h( e9 _
  21. CSpace:10015052                 mov     edx, [ecx+20h]  j/ A6 y0 J* o3 e0 f
  22. CSpace:10015055                 push    edx
    " O2 ]/ {. E& S' z9 w+ l
  23. CSpace:10015056                 push    offset aUsingDirectdra ; "Using DirectDraw %s (%s)": R- U7 \" |2 U' s' V3 Q
  24. CSpace:1001505B                 push    34 A4 z9 [: M5 W% z7 j4 \
  25. CSpace:1001505D                 mov     eax, [ebp+dwNewLong]
    6 S# i/ S- G; ~( H9 x  b
  26. CSpace:10015060                 push    eax
    - p5 _. }5 m% I5 }* U8 N5 s
  27. CSpace:10015061                 call    sub_1003882A
    $ e- a0 p# Q" Z! X
  28. CSpace:10015066                 add     esp, 14h
    ' C- g$ \2 d) T- G% D5 N1 C( D* x8 L
  29. CSpace:10015069                 push    0               ; pUnkOuter8 u. w  _; \( ~. P2 k4 u& j2 z
  30. CSpace:1001506B                 mov     eax, [ebp+dwNewLong]' z* |' Q4 H6 v  Z' j# }
  31. CSpace:1001506E                 add     eax, 1DCh3 S( N% E1 H0 D1 P0 W# |  f& r
  32. CSpace:10015073                 push    eax             ; lplpDD: b4 c/ x1 K+ v+ w5 D/ o
  33. CSpace:10015074                 mov     ecx, [ebp+lpGUID]
    " e/ |/ i. L; G
  34. CSpace:10015077                 push    ecx             ; lpGUID
    3 H4 `( |7 C2 O) R0 F
  35. CSpace:10015078                 call    j_DirectDrawCreate
    - U- V6 l1 w+ J2 D3 }& X, X
  36. CSpace:1001507D                 mov     [ebp+var_14], eax
    6 ^, [6 E( b5 u# r
  37. CSpace:10015080                 cmp     [ebp+var_14], 03 ]1 U) ^( _, `+ v
  38. CSpace:10015084                 jz      short loc_1001509E( M" A/ F) X) a
  39. CSpace:10015086                 push    offset aDirectdrawcrea ; "DirectDrawCreate FAILED (Code: %08lx)\n"
    5 f4 B) o- T) q8 i' v  i4 }5 N' F
  40. CSpace:1001508B                 mov     eax, [ebp+var_14]
    * D; }8 |2 Q5 Y2 t2 k
  41. CSpace:1001508E                 push    eax
    + G) |* W) L7 E, A7 J
  42. CSpace:1001508F                 mov     ecx, [ebp+dwNewLong]
    1 f5 S" o. p6 i1 k& ^" N
  43. CSpace:10015092                 call    sub_10038F3C, S4 s$ C2 N4 i6 x
  44. CSpace:10015097                 xor     al, al
    7 L2 q( C3 s' t% T8 h( Y. U& e
  45. CSpace:10015099                 jmp     loc_10015173
复制代码
2 Q' U+ Y9 |/ `" ]4 q: H' O* x4 |& ^
- w2 C% N: G8 _# N* G% c' t

+ N/ r% n  u5 w& I8 c  [5 P" U4 N我用3D Analyzer对opengl API的调用进行跟踪之后,输出了不少log.
0 @/ t. s) }. L: K$ o记录到log_GL.out文件中。以下是摘录的一段。
9 z. `6 l( n  q2 }我认为这个游戏大概率使用的是opengl API,程序修改的切入点,还需要进一步分析。: V: }4 @0 k9 m/ ?8 i
以前Skywalker 说 这个游戏不能用Hypersnap抓图,这也算是个使用opengl API的侧面证明吧?
+ L, W9 t! t/ P: B
  1. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>7 v# n2 S9 z- S" @* g* o
  2. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>/ @! ]4 C/ p) G: z
  3. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>. ?3 S% J0 Z- t, K) x  Q/ g
  4. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>
    " G# `4 @' I+ a8 g
  5. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    # S7 S4 G0 u  Y( v
  6. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>1 r7 H; V% s5 l* M2 V% \" s. k
  7. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>/ g8 O' G8 f4 @7 M" \& ?
  8. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>: w. c; b7 n# W+ y8 `
  9. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>5 ]7 ?9 n, W& U" x, k. g- h# o% T
  10. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>8 x+ L. I3 O( V1 c& l' v
  11. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>
      A8 y( ]* s* N0 t& R8 z; i
  12. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>9 y) Q4 G7 A. C: b. }% ?
  13. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>+ R3 l% H) j! ^+ u+ `
  14. glClear, GLbitfield<256>; W' \, R1 q$ a: j
  15. glShadeModel, GLenum<7424>
    8 N9 c, o# S6 H. q+ z* M" H- U% P: g
  16. glDisable, GLenum<2929>" F9 S; @2 R& B; |1 G/ |
  17. glDisable, GLenum<3008>
    , v: A2 Q* a  |9 x8 z
  18. glDisable, GLenum<2896>8 _. Z0 L9 {- n# N0 J* N- l2 y, w
  19. glEnable, GLenum<3042>
    1 {- C3 c6 L* n$ ?
  20. glDisable, GLenum<3553>2 B* p1 U. M, f
  21. glBindTexture, GLenum<3553>, GLuint<631>; w8 `. v$ N3 W/ J6 x
  22. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>3 @) f% ?7 p5 A0 z
  23. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>* R; f# R# N$ n" R8 O2 H: _" L
  24. glClear, GLbitfield<16384>& z+ J) T6 s7 o7 n0 P6 Z, N: {7 q
  25. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>: y: J+ M& m8 A
  26. glEnable, GLenum<3553>8 J0 u; U& V( g3 J0 O# R8 }, S
  27. glBegin, GLenum<7>6 r- a) s  W" z# f9 R8 ?; k
  28. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    % d7 D7 t1 L& M# D  s
  29. glTexCoord2f, GLfloat<0>, GLfloat<0>9 a/ l# e: B8 Z, N" M. F
  30. glVertex2i, GLint<0>, GLint<768>3 I' I; `  k" U3 X" {( Q
  31. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>! d7 ]% ^. Y" i2 L
  32. glVertex2i, GLint<1024>, GLint<768>
    % U. S3 G% {& a& b' A& M
  33. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>
    $ `; L* S9 Y" A, \  U
  34. glVertex2i, GLint<1024>, GLint<-256>7 ^; u: Z5 L, X3 s  p0 ~$ H
  35. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>9 W7 ]6 m$ `- r0 t5 L" D2 X
  36. glVertex2i, GLint<0>, GLint<-256>
      v9 T! g( b  }0 s
  37. glEnd
    " ^- ~9 s: v/ _8 J
  38. glShadeModel, GLenum<7424>  Z; L% \5 w) K* H
  39. glGetError" F& q. d, y5 H' y
  40. glDisable, GLenum<2929>
    ( _* R+ N5 d! I- d4 D
  41. glGetError
    * J. s4 `% \# _8 q
  42. glBlendFunc, GLenum<770>, GLenum<771>8 R4 `: Z& }+ g9 _2 S& H
  43. glGetError2 ^1 h! i2 A) P0 E5 h' L
  44. glEnable, GLenum<3042>3 o+ }/ Z6 R( C0 }( e9 U" r
  45. glGetError
    : \/ j5 C' ^4 o- W
  46. glDisable, GLenum<3553>
    ; `6 Q3 H, O, |4 X8 k5 f2 V
  47. glGetError9 H5 h  |8 p  T" W4 s! I. s* b
  48. glBegin, GLenum<7>
    6 c+ A9 U2 M  P
  49. glColor4f, GLfloat<0>, GLfloat<0>, GLfloat<0>, GLfloat<1059883844>* P9 W- ^0 L" }) I! |
  50. glTexCoord2f, GLfloat<0>, GLfloat<0>
    7 z# _0 m/ d' c7 e4 A  c
  51. glVertex2i, GLint<0>, GLint<768>5 ?* }) L1 g. b* Q
  52. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>: q2 ]1 z4 a3 }9 o. f) B1 R
  53. glVertex2i, GLint<1024>, GLint<768>
    & W* L: m+ m: [+ Y8 W8 @
  54. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>* G1 }+ L/ a$ v9 i& m
  55. glVertex2i, GLint<1024>, GLint<0>
    0 ]: K& l1 T2 M- t7 a! C, v( z
  56. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>' j# ^6 h) s1 E$ ]  R! Z4 p) H: [
  57. glVertex2i, GLint<0>, GLint<0>
    0 r2 k/ ]7 t- Y  u
  58. glEnd
    ( Y" r! z! }! [. {' Z1 u0 S6 Y, }
  59. glGetError
    ' P4 p, \* q) {1 U0 |. d
  60. glEnable, GLenum<3553>* w/ f/ s# o0 ^3 C+ c0 D( C$ R  e
  61. glGetError9 Y  p- D6 N/ T
  62. glFlush8 q+ o" M" ^3 t1 n) r  W
  63. wglSwapBuffers
    0 m: ]5 }! B) b+ m6 W/ m* [
  64. ---------------------------- N: ^: T1 _9 v% j
  65. , HDC<-33484711>* d- I+ N2 c' s8 t
  66. wglGetPixelFormat, HDC<-33484711>: q. r4 ?4 [! Q5 h
  67. glMatrixMode, GLenum<5889>
    ( h+ {7 ?/ ~6 N3 ~' z5 D+ y
  68. glLoadIdentity
    8 P- E5 g! Y/ S7 e2 L: ?6 C
  69. glOrtho, GLdouble<00>, GLdouble<01083179008>, GLdouble<00>, GLdouble<01082654720>, GLdouble<0-1074790400>, GLdouble<01076101120>
    8 d( G5 F7 H* d, w- `( Y/ q  k' O
  70. glViewport, GLint<0>, GLint<0>, GLsizei<1024>, GLsizei<768>
    # G2 E6 c% R! m1 v5 U
  71. glMatrixMode, GLenum<5888>
    ; z9 J* r( D& u6 t
  72. glLoadIdentity6 @( Z4 a4 C( L% ~8 o/ t
  73. glColor3f, GLfloat<1065353216>, GLfloat<0>, GLfloat<0>2 n7 f4 a2 M1 X
  74. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>) b/ P, \& P6 q6 P! y& Q
  75. glTexEnvi, GLenum<8960>, GLenum<34176>, GLint<5890>* V+ N; u8 L$ `) P: Z$ [
  76. glTexEnvi, GLenum<8960>, GLenum<34192>, GLint<768>
    3 x* K* }# a, L: J
  77. glTexEnvi, GLenum<8960>, GLenum<34177>, GLint<34167>' Q: {1 s! {7 M/ y3 ^
  78. glTexEnvi, GLenum<8960>, GLenum<34193>, GLint<768>
    ; f; D: |" J8 H  r& t: [4 c# ^; J6 |
  79. glTexEnvi, GLenum<8960>, GLenum<34161>, GLint<8448>
    ; y  Y& B) j' Z& m
  80. glTexEnvf, GLenum<8960>, GLenum<34163>, GLfloat<1065353216>
    , t# f7 J$ u# ?  \" x/ K: R# z8 X
  81. glTexEnvi, GLenum<8960>, GLenum<34184>, GLint<5890>0 t: A7 x5 Z/ D7 e2 V+ t
  82. glTexEnvi, GLenum<8960>, GLenum<34200>, GLint<770>
    / R0 l% m2 ?* \5 o& E- z' z. G
  83. glTexEnvi, GLenum<8960>, GLenum<34185>, GLint<34167>$ d' M1 N: u& F0 D, }" Z3 P
  84. glTexEnvi, GLenum<8960>, GLenum<34201>, GLint<770>$ C$ J2 R5 a/ ^' u7 d6 K
  85. glTexEnvi, GLenum<8960>, GLenum<34162>, GLint<8448>
    0 ]' m* N9 i. O
  86. glTexEnvf, GLenum<8960>, GLenum<3356>, GLfloat<1065353216>
    * i, z: @5 Z4 }& H3 q
  87. glClear, GLbitfield<256>
    6 ?) ]6 A3 Q2 R6 D& @
  88. glShadeModel, GLenum<7424>
    - N  l* D; N( ]2 Y8 @
  89. glDisable, GLenum<2929>
    8 R& I$ U' I4 r: k# R7 {- ^
  90. glDisable, GLenum<3008>
    # U. z% e  o# {  U4 c/ k9 q! b
  91. glDisable, GLenum<2896>
    ( {- L5 r$ X, X) b9 ~! g
  92. glEnable, GLenum<3042>
    , n4 {6 f5 |' [& U- U; f. x
  93. glDisable, GLenum<3553># g9 A9 g& m& X4 y0 s6 }/ {/ A
  94. glBindTexture, GLenum<3553>, GLuint<631>
    & H' B+ s4 J% {, [
  95. glTexParameteri, GLenum<3553>, GLenum<10240>, GLint<9729>3 d2 |; P$ I' A# F" ~
  96. glClearColor, GLclampf<0>, GLclampf<0>, GLclampf<0>, GLclampf<0>
    / E5 |9 @9 M. D/ e
  97. glClear, GLbitfield<16384>
    . c3 ~8 k3 t8 Y# p0 U$ N, b
  98. glTexSubImage2D, GLenum<3553>, GLint<0>, GLint<0>, GLint<0>, GLsizei<512>, GLsizei<384>, GLenum<6408>, GLenum<5121>, CGLvoidP<266776608>
    4 n6 \0 Y9 [0 n- ?9 ]
  99. glEnable, GLenum<3553>9 Q4 m* H, C) Q( J# Z4 v5 y
  100. glBegin, GLenum<7>+ \. e% t' C( q' }6 j! n3 K/ y
  101. glColor4f, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>, GLfloat<1065353216>
    + j, V( o# i# W( t% G2 e  l
  102. glTexCoord2f, GLfloat<0>, GLfloat<0>5 b/ F) i9 h. F8 p$ E$ s3 s
  103. glVertex2i, GLint<0>, GLint<768>. q/ w0 w1 b' V/ \+ r
  104. glTexCoord2f, GLfloat<1065353216>, GLfloat<0>
    * l4 S) V9 [- K7 J/ M! D9 v$ c4 F, L
  105. glVertex2i, GLint<1024>, GLint<768>$ f' H' u# a) X  ~! P% X: z
  106. glTexCoord2f, GLfloat<1065353216>, GLfloat<1065353216>4 W1 R2 t3 V$ m6 O3 t
  107. glVertex2i, GLint<1024>, GLint<-256>
    % ?* L3 C: `5 G. w/ L
  108. glTexCoord2f, GLfloat<0>, GLfloat<1065353216>' g9 `) x/ `+ D$ m: o  l
  109. glVertex2i, GLint<0>, GLint<-256>( y$ U7 `  @) s3 L3 q* a- {
复制代码
- q2 M# E& O! H( C$ l
# G/ L  y* ?! @6 ?% p
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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