Advertisement
Guest User

Untitled

a guest
Jul 19th, 2016
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.99 KB | None | 0 0
  1. int __cdecl sub_7FDB0()
  2. {
  3.  
  4.  
  5. *v33 = &unk_142668;
  6. v36 = 0;
  7. do
  8. {
  9. result = *v33;
  10. if ( *(*v33 + 3) )
  11. {
  12. if ( *(*v33 + 24) >= *(*v33 + 28) )
  13. {
  14. WORD3(v34) = **v33;
  15. v1 = veh_struct;
  16. WORD1(v34) = *(*v33 + 1);
  17. *&v37[4] = *(*v33 + 30);
  18. v2 = 0;
  19. while ( *&v1->count >> 16 == -1
  20. || LOBYTE(v1->current_demention) != alien_demen_flag
  21. || SWORD3(v34) < v1->unknown_x_pos1
  22. || SWORD3(v34) >= v1->unknown_x_pos2
  23. || SWORD1(v34) < v1->unknown_y_pos1
  24. || SWORD1(v34) >= v1->unknown_y_pos2
  25. || *&v37[4] < v1->unknown_altitude1
  26. || *&v37[4] >= v1->unknown_altitude2 )
  27. {
  28. ++v2;
  29. ++v1;
  30. if ( v2 >= 80 )
  31. goto LABEL_17;
  32. }
  33. HIWORD(v38) = v1->x_pos_3d;
  34. *&v33[4] = v1->y_pos_3d;
  35. v3 = v1->z_pos_3d;
  36. Vehicle_damaged(v2, 12, 4, 0);
  37. if ( *&v1->count >> 16 == -1 )
  38. sub_63744(v38 >> 16, *&v33[2] >> 16);
  39. *(*v33 + 26) = 0;
  40. *(*v33 + 24) = (*(*v33 + 24) >> 18) + (*(*v33 + 22) >> 16);
  41. LABEL_17:
  42. v4 = tile_ind(SHIDWORD(v34) >> 16, v34 >> 16, *&v37[2] >> 16);
  43. if ( *v4 || !*&v37[4] )
  44. {
  45. v7 = 52 * *v4;
  46. if ( *(&citymap_dat.constitution + v7) < 255u
  47. && *(&citymap_dat.strength + v7) < (*(*v33 + 26) >> 18) + (*(*v33 + 30) >> 16) - 4 )
  48. {
  49. collapse_tile(SBYTE6(v34), SBYTE2(v34), v37[4]);
  50. if ( *&v37[4] >= 0 )
  51. {
  52. HIWORD(v35) = *&v37[4] + 1;
  53. v8 = sub_5D260();
  54. if ( v8 )
  55. {
  56. v8[1] = 32 * WORD3(v34);
  57. v8[4] = 0;
  58. v8[2] = 32 * WORD1(v34);
  59. *v8 = 3;
  60. v8[3] = 16 * HIWORD(v35);
  61. }
  62. HIWORD(v39) = WORD3(v34) - 1;
  63. *v37 = *(&v34 + 2) - 1;
  64. while ( v39 >> 16 <= (SHIDWORD(v34) >> 16) + 1 )
  65. {
  66. for ( i = *v37; ; i = v13 + 1 )
  67. {
  68. v16 = i;
  69. if ( i > (v34 >> 16) + 1 )
  70. break;
  71. v10 = v35 >> 16;
  72. v11 = v39 >> 16;
  73. v12 = tile_ind(v39 >> 16, i, v35 >> 16);
  74. if ( *v12 )
  75. {
  76. if ( WORD3(v34) != HIWORD(v39) || v13 != WORD1(v34) )
  77. {
  78. v14 = 52 * *v12;
  79. if ( *(&citymap_dat.constitution + v14) < 255u
  80. && *(&citymap_dat.constitution + v14) < (*(*v33 + 26) >> 18) + (*(*v33 + 30) >> 16) - 4 )
  81. {
  82. if ( collapse_tile(SBYTE2(v39), v13, SBYTE2(v35)) )
  83. {
  84. v15 = sub_5D260();
  85. if ( v15 )
  86. {
  87. v15[1] = 32 * HIWORD(v39);
  88. v15[4] = 0;
  89. v15[2] = 32 * v13;
  90. *v15 = 3;
  91. v15[3] = 16 * HIWORD(v35);
  92. }
  93. }
  94. }
  95. }
  96. }
  97. else
  98. {
  99. sub_80528(v11, v16, v10);
  100. }
  101. }
  102. ++HIWORD(v39);
  103. }
  104. }
  105. }
  106. if ( *&v37[4] )
  107. v17 = *&v37[2] >> 16;
  108. else
  109. LOWORD(v17) = 1;
  110. HIWORD(v35) = v17;
  111. if ( WORD3(v34) )
  112. v18 = (SHIDWORD(v34) >> 16) - 1;
  113. else
  114. v18 = WORD2(v34) >> 16;
  115. for ( HIWORD(v39) = v18; v39 >> 16 <= (SHIDWORD(v34) >> 16) + 1 && SHIWORD(v39) < 100; ++HIWORD(v39) )
  116. {
  117. if ( WORD1(v34) )
  118. v19 = (v34 >> 16) - 1;
  119. else
  120. v19 = v34 >> 16;
  121. while ( 1 )
  122. {
  123. v24 = v19;
  124. if ( v19 > (v34 >> 16) + 1 || v19 >= 100 )
  125. break;
  126. v20 = tile_ind(v39 >> 16, v19, v35 >> 16);
  127. if ( *v20 )
  128. {
  129. if ( WORD3(v34) != HIWORD(v39) || v21 != WORD1(v34) )
  130. {
  131. v22 = 52 * *v20;
  132. if ( *(&citymap_dat.constitution + v22) < 0xFFu
  133. && *(&citymap_dat.constitution + v22) < (*(*v33 + 30) >> 16) + (*(*v33 + 26) >> 18) - 4 )
  134. {
  135. if ( collapse_tile(SBYTE2(v39), v21, SBYTE2(v35)) )
  136. {
  137. v23 = sub_5D260();
  138. if ( v23 )
  139. {
  140. v23[1] = 32 * HIWORD(v39);
  141. v23[4] = 0;
  142. v23[2] = 32 * v21;
  143. *v23 = 3;
  144. v23[3] = 16 * HIWORD(v35);
  145. }
  146. }
  147. }
  148. }
  149. }
  150. else
  151. {
  152. sub_80528(SHIWORD(v39), v24, SHIWORD(v35));
  153. }
  154. LOWORD(v19) = v19 + 1;
  155. }
  156. }
  157. v25 = 0;
  158. while ( v25 < *(*v33 + 3) - 1 )
  159. {
  160. v26 = 2 * v25++;
  161. *(*v33 + v26 + 4) = *(*v33 + v26 + 6);
  162. }
  163. v27 = *(*v33 + 24);
  164. --*(*v33 + 3);
  165. *(*v33 + 24) = v27 - 16;
  166. sound(2, SWORD3(v34), SWORD1(v34), *&v37[4], 2);
  167. if ( !*(*v33 + 3) && !alien_demen_flag && (*(*v33 + 32) > 5 || *(*v33 + 4) >= 0xD4u) )
  168. {
  169. v28 = tile_ind(SHIDWORD(v34) >> 16, v34 >> 16, (*&v37[2] >> 16) + 1);
  170. v29 = *(*v33 + 32);
  171. if ( v29 > 10 )
  172. {
  173. if ( v29 > 25 )
  174. *v28 = v29 > 45 ? 212 : 213;
  175. else
  176. *v28 = 214;
  177. }
  178. else
  179. {
  180. *v28 = 215;
  181. }
  182. v30 = sub_5F688();
  183. if ( v30 )
  184. {
  185. v30[1] = WORD3(v34);
  186. v30[2] = WORD1(v34);
  187. *v30 = -1;
  188. v30[3] = *&v37[4] + 1;
  189. }
  190. }
  191. v31 = sub_5D260();
  192. if ( v31 )
  193. {
  194. v31[1] = 32 * WORD3(v34);
  195. v31[4] = 0;
  196. v31[2] = 32 * WORD1(v34);
  197. *v31 = 3;
  198. v31[3] = 16 * *&v37[4];
  199. }
  200. }
  201. else if ( !v5 )
  202. {
  203. v6 = *(*v33 + 28);
  204. --*(*v33 + 30);
  205. *(*v33 + 28) = v6 + 16;
  206. }
  207. }
  208. result = *v33;
  209. if ( *(*v33 + 28) > *(*v33 + 24) )
  210. {
  211. result = (*(*v33 + 24) >> 18) + (*(*v33 + 22) >> 16);
  212. v32 = *(*v33 + 26);
  213. *(*v33 + 24) = result;
  214. if ( v32 < 20 )
  215. *(*v33 + 26) = v32 + 1;
  216. }
  217. }
  218. *v33 += 34;
  219. ++v36;
  220. }
  221. while ( v36 < 64 );
  222. return result;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement