Advertisement
szymski

Untitled

Nov 6th, 2016
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. @handler
  2. void readdat(string[] args) {
  3. debug {
  4. args ~= r"D:\GOG Games\Rayman 2\Rayman 2 Modded\Data\World\Levels\LEVELS0.DAT";
  5. }
  6.  
  7. if(args.length == 0) {
  8. writeln("Usage: readdat datfile");
  9. return;
  10. }
  11.  
  12. File f = File(args[0]);
  13.  
  14. // Init BigFile
  15.  
  16. DATHeader header = f.readType!DATHeader;
  17. int number;
  18. f.readTo(&number, 4);
  19. header.field_0 += header.field_8;
  20. header.field_4 += header.field_C;
  21. f.readTo(&number, 4);
  22. uint levels0DatValue_0 = header.field_4 ^ (number - header.field_0);
  23. header.field_0 += header.field_8;
  24. header.field_4 += header.field_C;
  25. f.readTo(&number, 4);
  26. uint levels0DatValue_1 = (header.field_4 ^ cast(uint)(number - header.field_0)) >> 2;
  27. header.field_0 += header.field_8;
  28. header.field_4 += header.field_C;
  29. f.readTo(&number, 4);
  30. header.field_0 += header.field_8;
  31. header.field_4 += header.field_C;
  32. f.readTo(&number, 4);
  33. int v4 = header.field_4 ^ (number - header.field_0);
  34. header.field_0 += header.field_8;
  35. header.field_4 += header.field_C;
  36. uint levels0DatValue_2 = v4;
  37. f.readTo(&number, 4);
  38. int v5 = header.field_4 ^ (number - header.field_0);
  39. header.field_0 += header.field_8;
  40. uint levels0DatValue_3 = v5;
  41. header.field_4 += header.field_C;
  42. f.readTo(&number, 4);
  43. int v6 = header.field_4 ^ (number - header.field_0);
  44. header.field_0 += header.field_8;
  45. header.field_4 += header.field_C;
  46. uint levels0DatValue_4 = v6;
  47. f.readTo(&number, 4);
  48. int levels0DatValue_5 = header.field_4 ^ (number - header.field_0);
  49. header.field_0 += header.field_8;
  50. header.field_4 += header.field_C;
  51.  
  52. printStruct(header);
  53.  
  54. writeln(levels0DatValue_0.to!string(16));
  55. writeln(levels0DatValue_1.to!string(16));
  56. writeln(levels0DatValue_2.to!string(16));
  57. writeln(levels0DatValue_3.to!string(16));
  58. writeln(levels0DatValue_4.to!string(16));
  59. writeln(levels0DatValue_5.to!string(16));
  60.  
  61. // Get offset with sinus header
  62.  
  63. SplitInt SNA_g_ucNextRelocationTableToLoad;
  64. SNA_g_ucNextRelocationTableToLoad = 0xFA0D0447;
  65. SNA_g_ucNextRelocationTableToLoad.byte0 = cast(ubyte)(SNA_g_ucNextRelocationTableToLoad.byte0 % levels0DatValue_1);
  66. SNA_g_ucNextRelocationTableToLoad.byte1 &= 3;
  67.  
  68. v6 = 4 * SNA_g_ucNextRelocationTableToLoad.byte0;
  69. int v28 = 4 * SNA_g_ucNextRelocationTableToLoad.byte0;
  70.  
  71. int v7 = v28;
  72.  
  73. switch(SNA_g_ucNextRelocationTableToLoad.byte1) {
  74. case 1:
  75. v7 = v6 + 1;
  76. break;
  77. case 2:
  78. v7 = v6 + 2;
  79. break;
  80. case 3:
  81. v7 = v6 + 3;
  82. break;
  83. default:
  84. break;
  85. }
  86.  
  87. v28 = v7;
  88.  
  89. uint v8 = SNA_g_ucNextRelocationTableToLoad.byte2 % levels0DatValue_2;
  90. real v9 = 1.06913;
  91. real v30 = 1.06913;
  92. SNA_g_ucNextRelocationTableToLoad.byte2 = cast(ubyte)v8;
  93.  
  94. if(v8) {
  95. uint v10 = 0;
  96. double v11 = 0;
  97.  
  98. do
  99. {
  100. v30 = v10;
  101. v11 = cast(double)v10;
  102. v10++;
  103. v9 = v9 - fabs(sin(v11 * v11 * 1.69314)) * -0.69314 - -0.52658;
  104. }
  105. while ( v10 < v8 );
  106.  
  107. v30 = v9;
  108. }
  109.  
  110. real v23 = 0;
  111.  
  112. double v12 = modf(v30, v23);
  113. double v13 = floor(v12 * 1000000.0);
  114. ulong v24 = levels0DatValue_0;
  115. long v14 = cast(long)floor(cast(double)cast(uint)levels0DatValue_0 * (v13 * 0.000001));
  116.  
  117. f.seek(levels0DatValue_4 + levels0DatValue_5 * v14);
  118. header = f.readType!DATHeader;
  119. if(v28) {
  120. int v15, v16;
  121.  
  122. header.field_0 += v28 * header.field_8;
  123. v15 = header.field_4;
  124. v16 = v28;
  125. do
  126. {
  127. v15 += header.field_C;
  128. --v16;
  129. }
  130. while (v16);
  131. header.field_4 = v15;
  132. }
  133.  
  134. f.seek(4 * v28, SEEK_CUR);
  135. uint value1 = f.readType!uint;
  136.  
  137. uint v17 = header.field_4 ^ (value1 - header.field_0);
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement