Advertisement
Martymoose98

NieR:Automata File Loading pseudo

Mar 27th, 2019
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.56 KB | None | 0 0
  1. signed __int64 __fastcall sub_14086C5D0(ObjReadSystem::Work *a1)
  2. {
  3. int v1; // edx
  4. ObjReadSystem::Work *v2; // rbx
  5. signed int v3; // esi
  6. ObjectIdConvert *v4; // rdi
  7. int v5; // edx
  8. unsigned int v6; // eax
  9. ObjectIdConvert *v7; // r9
  10. unsigned int v8; // ecx
  11. __int64 v10; // rcx
  12. unsigned __int64 v11; // rax
  13. __int64 v12; // rdx
  14. __int64 v13; // rcx
  15. int v14; // eax
  16. signed __int64 v15; // rax
  17. int v16; // edx
  18. unsigned int v17; // eax
  19. __int64 v18; // rdx
  20. __int64 v19; // rcx
  21. __int64 v20; // rcx
  22. unsigned __int64 v21; // rax
  23. int v22; // eax
  24. signed __int64 v23; // rax
  25. signed __int64 v24; // rax
  26. __int64 v25; // rcx
  27. signed __int64 v26; // rax
  28. __int64 v27; // rcx
  29. __int64 v28; // [rsp+28h] [rbp-C0h]
  30. __int64 v29; // [rsp+40h] [rbp-A8h]
  31. int v30; // [rsp+48h] [rbp-A0h]
  32. __int64 v31; // [rsp+50h] [rbp-98h]
  33. int v32; // [rsp+58h] [rbp-90h]
  34. int v33; // [rsp+60h] [rbp-88h]
  35. void *v34; // [rsp+68h] [rbp-80h]
  36. void *v35; // [rsp+70h] [rbp-78h]
  37. char szStr; // [rsp+78h] [rbp-70h]
  38. char szDest[20]; // [rsp+90h] [rbp-58h]
  39. char szObjectName[16]; // [rsp+A8h] [rbp-40h]
  40. char Dest; // [rsp+B8h] [rbp-30h]
  41.  
  42. v1 = *(_DWORD *)a1->gap30;
  43. v2 = a1;
  44. v3 = 0;
  45. v4 = &g_ConvertObjectIds;
  46. if ( v1 )
  47. {
  48. v15 = FIND_sub_14086B0E0((__int64)a1, v1);
  49. v13 = v15;
  50. if ( v15 )
  51. {
  52. _InterlockedCompareExchange((volatile signed __int32 *)(v15 + 40), 1, 0);
  53. _InterlockedIncrement((volatile signed __int32 *)(v15 + 32));
  54. }
  55. }
  56. else
  57. {
  58. v5 = a1->objectId;
  59. v6 = 0;
  60. v7 = &g_ConvertObjectIds;
  61. v8 = a1->objectId & 0xFFFF0000;
  62. while ( v7->m_ObjectIdBase != v8 )
  63. {
  64. ++v6;
  65. ++v7;
  66. if ( v6 >= 12 )
  67. return 0i64;
  68. }
  69. LODWORD(v28) = (unsigned __int16)v5;
  70. snprintf(szDest, 20i64, "%s\\%s%04x%s", v7->m_szPrefix, v7->m_szPrefix, v28, ".dat");
  71. sub_140574ED0(&v29, (unsigned int)v2->objectId, 0i64);
  72. if ( !v29 )
  73. {
  74. ObjectIdToObjectName(&Dest, 0x10ui64, v2->objectId);
  75. return 0i64;
  76. }
  77. v11 = FileReadManager::PreloadFile(v10, 3, szDest, v29, v30, (__int64)v2);
  78. v13 = v11;
  79. if ( v11 )
  80. {
  81. _InterlockedCompareExchange((volatile signed __int32 *)(v11 + 40), 1, 0);
  82. _InterlockedIncrement((volatile signed __int32 *)(v11 + 32));
  83. v14 = *(_DWORD *)(v11 + 116);
  84. }
  85. else
  86. {
  87. v14 = 0;
  88. }
  89. *(_DWORD *)v2->gap30 = v14;
  90. if ( !v14 )
  91. return 0i64;
  92. v3 = 1;
  93. }
  94. if ( v2->gap28[0] & 2 )
  95. {
  96. LABEL_32:
  97. if ( !v3 )
  98. return 1i64;
  99. goto LABEL_33;
  100. }
  101. v16 = *(_DWORD *)&v2->gap30[4];
  102. if ( v16 )
  103. {
  104. v23 = FIND_sub_14086B0E0(v13, v16);
  105. if ( v23 )
  106. {
  107. _InterlockedCompareExchange((volatile signed __int32 *)(v23 + 40), 1, 0);
  108. _InterlockedIncrement((volatile signed __int32 *)(v23 + 32));
  109. }
  110. goto LABEL_32;
  111. }
  112. v17 = 0;
  113. while ( v4->m_ObjectIdBase != (v2->objectId & 0xFFFF0000) )
  114. {
  115. ++v17;
  116. ++v4;
  117. if ( v17 >= 0xC )
  118. return 0i64;
  119. }
  120. LODWORD(v28) = (unsigned __int16)v2->objectId;
  121. snprintf(&szStr, 20i64, "%s\\%s%04x%s", v4->m_szPrefix, v4->m_szPrefix, v28, ".dtt");
  122. if ( !SanitizeFilePath(&szStr) )
  123. {
  124. *(_DWORD *)v2->gap28 |= 2u;
  125. goto LABEL_32;
  126. }
  127. v18 = (unsigned int)v2->objectId;
  128. *(_DWORD *)v2->gap28 |= 1u;
  129. sub_140574ED0(&v31, v18, 1i64);
  130. if ( v31 )
  131. {
  132. v21 = FileReadManager::PreloadFile(v19, 3, &szStr, v31, v32, (__int64)v2);
  133. v20 = v21;
  134. if ( v21 )
  135. {
  136. _InterlockedCompareExchange((volatile signed __int32 *)(v21 + 40), 1, 0);
  137. _InterlockedIncrement((volatile signed __int32 *)(v21 + 32));
  138. v22 = *(_DWORD *)(v21 + 116);
  139. }
  140. else
  141. {
  142. v22 = 0;
  143. }
  144. *(_DWORD *)&v2->gap30[4] = v22;
  145. if ( !v22 )
  146. goto LABEL_39;
  147. LABEL_33:
  148. v33 = v2->objectId;
  149. v34 = v2->m_pDatPtr;
  150. v35 = v2->m_pDatPtr2;
  151. if ( !(unsigned int)sub_14086C2A0(&v33, v12) )
  152. {
  153. if ( !(v2->gap28[0] & 2) )
  154. {
  155. v24 = FIND_sub_14086B0E0(v20, *(_DWORD *)&v2->gap30[4]);
  156. if ( v24 )
  157. {
  158. if ( *(ObjReadSystem::Work **)(v24 + 0xA8) == v2 )
  159. *(_QWORD *)(v24 + 0xA8) = 0i64;
  160. }
  161. sub_14086A730(v25, *(unsigned int *)&v2->gap30[4]);
  162. *(_DWORD *)&v2->gap30[4] = 0;
  163. }
  164. goto LABEL_39;
  165. }
  166. return 1i64;
  167. }
  168. ObjectIdToObjectName(szObjectName, 16ui64, v2->objectId);
  169. LABEL_39:
  170. v26 = FIND_sub_14086B0E0(v20, *(_DWORD *)v2->gap30);
  171. if ( v26 )
  172. {
  173. if ( *(ObjReadSystem::Work **)(v26 + 168) == v2 )
  174. *(_QWORD *)(v26 + 168) = 0i64;
  175. }
  176. sub_14086A730(v27, *(unsigned int *)v2->gap30);
  177. *(_DWORD *)v2->gap30 = 0;
  178. return 0i64;
  179. }
  180.  
  181. // write access to const memory has been detected, the output may be wrong!
  182. signed __int64 __fastcall BannedWord::LoadBlackLists(__int64 a1, __int64 a2, int a3)
  183. {
  184. int v3; // ebx
  185. unsigned __int64 v4; // rax
  186. signed __int64 result; // rax
  187.  
  188. v3 = a3;
  189. off_14147B498 = (__int64)&qword_1418F64E8;
  190. off_14147B490 = (__int64)&g_pGlobalWorkHeap;
  191. v4 = FileReadManager::PreloadFile(a1, 5, "core/coreban.dat", (__int64)&qword_1418F64E8, 0, 0i64);
  192. if ( v4 )
  193. {
  194. _InterlockedCompareExchange((volatile signed __int32 *)(v4 + 40), 1, 0);
  195. _InterlockedIncrement((volatile signed __int32 *)(v4 + 32));
  196. LODWORD(v4) = *(_DWORD *)(v4 + 116);
  197. }
  198. g_dword_14147B48C = v4;
  199. if ( (_DWORD)v4 )
  200. {
  201. dword_14147B4A0 = v3;
  202. dword_14147B4A8 = 1;
  203. dword_14147B4A4 = 0;
  204. result = 1i64;
  205. }
  206. else
  207. {
  208. sub_140606BE0();
  209. result = 0i64;
  210. }
  211. return result;
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement