@@ -125,7 +125,7 @@ struct TDB {
125125 int32_t devEntry;
126126 int32_t appEntry;
127127
128- uint32_t unkNum; // added in Pragmata (TDB 84 )
128+ uint32_t unkNum; // added in TDB 82 (mhstories 3 )
129129
130130 uint32_t numStringPool;
131131 uint32_t numBytePool;
@@ -266,6 +266,184 @@ struct GenericListData {
266266};
267267}
268268
269+
270+ namespace tdb82 {
271+ struct REMethodDefinition ;
272+ struct REMethodImpl ;
273+ struct REField ;
274+ struct REFieldImpl ;
275+ struct REProperty ;
276+ struct RETypeImpl ;
277+ struct REPropertyImpl ;
278+ struct REParameterDef ;
279+ struct REModule ;
280+
281+ struct TDB {
282+ uint32_t magic;
283+ uint32_t version;
284+ uint32_t numTypes;
285+ uint32_t typesStartOfGenericsProbably; // I think this is the index of the start of the generics list in the types array (or start of something else)
286+
287+ uint32_t unk_int_tdb74;
288+
289+ uint32_t numMethods;
290+ uint32_t numFields;
291+ uint32_t numTypeImpl;
292+ uint32_t numFieldImpl;
293+ uint32_t numMethodImpl;
294+ uint32_t numPropertyImpl;
295+ uint32_t numProperties;
296+ uint32_t numEvents;
297+
298+ uint32_t numParams;
299+ uint32_t numAttributes;
300+ int32_t numInitData;
301+ uint32_t numAttributes2;
302+ uint32_t numInternStrings;
303+ uint32_t numModules;
304+ int32_t devEntry;
305+ int32_t appEntry;
306+
307+ uint32_t unkNum; // added in TDB 82 (mhstories 3)
308+
309+ uint32_t numStringPool;
310+ uint32_t numBytePool;
311+
312+ sdk::REModule* modules;
313+ sdk::RETypeDefinition (*types)[93788 ];
314+ sdk::RETypeImpl (*typesImpl)[256 ];
315+ sdk::REMethodDefinition (*methods)[703558 ];
316+ sdk::REMethodImpl (*methodsImpl)[56756 ];
317+ sdk::REField (*fields)[1 ];
318+ sdk::REFieldImpl (*fieldsImpl)[1 ];
319+ sdk::REProperty (*properties)[256 ];
320+ sdk::REPropertyImpl (*propertiesImpl)[1 ];
321+ void * events;
322+ sdk::REParameterDef (*params)[10000 ];
323+ class ::REAttributeDef (*attributes)[2000 ];
324+ int32_t (*initData)[19890 ];
325+ void * unk;
326+ int32_t (*attributes2)[256 ];
327+ char (*stringPool)[1 ];
328+ uint8_t (*bytePool)[256 ];
329+ int32_t (*internStrings)[14154 ];
330+ };
331+
332+ struct REModule {
333+ uint32_t guid[4 ];
334+ int32_t unk1;
335+ uint32_t unk2;
336+ uint16_t major;
337+ uint16_t minor;
338+ uint16_t build;
339+ uint16_t revision;
340+ uint32_t flags;
341+ int32_t assembly_name_offset; // string
342+ int32_t location_offset; // string
343+ uint32_t unk3;
344+ uint32_t module_name_offset; // string
345+ uint32_t unk4;
346+ int32_t types_count;
347+ int32_t types_start;
348+ int32_t methods_count;
349+ int32_t methods_start;
350+ int32_t method_instantiations_count;
351+ int32_t method_instantiations_start;
352+ int32_t member_references_count;
353+ int32_t member_references_start;
354+ };
355+ static_assert (sizeof (REModule) == 0x58 );
356+
357+ #pragma pack(push, 4)
358+ struct REParameterDef {
359+ uint16_t attributes_id;
360+ uint16_t init_data_index;
361+ uint32_t name_offset : 30 ;
362+ uint32_t modifier : 2 ;
363+ uint32_t type_id : TYPE_INDEX_BITS;
364+ uint32_t flags : (32 - TYPE_INDEX_BITS);
365+ };
366+
367+ struct REMethodDefinition {
368+ uint32_t declaring_typeid : TYPE_INDEX_BITS;
369+ uint32_t params_lo : 13 ;
370+ uint32_t impl_id : 19 ;
371+ uint32_t params_hi : 13 ;
372+ int32_t encoded_offset;
373+ };
374+ static_assert (sizeof (REMethodDefinition) == 0xC );
375+
376+ struct REMethodImpl {
377+ uint16_t attributes_id;
378+ int16_t vtable_index;
379+ uint16_t flags;
380+ uint16_t impl_flags;
381+ uint32_t name_offset;
382+ };
383+
384+ struct RETypeImpl {
385+ int32_t name_offset; // 0x0
386+ int32_t namespace_offset; // 0x4
387+ int32_t field_size; // 0x8
388+ int32_t static_field_size; // 0xc
389+ uint64_t unk_pad : 33 ; // 0x10
390+ uint64_t num_member_fields : 24 ; // 0x10
391+ uint64_t unk_pad_2 : 7 ; // 0x10
392+ uint16_t num_member_methods; // 0x18
393+ int16_t num_native_vtable; // 0x1a
394+ int16_t interface_id; // 0x1c
395+ char pad_1e[0x12 ];
396+ };
397+ #if TDB_VER >= 71
398+ static_assert (sizeof (RETypeImpl) == 0x30 );
399+ static_assert (offsetof(RETypeImpl, num_member_methods) == 0x18 );
400+ #endif
401+
402+ struct REProperty {
403+ uint64_t impl_id : 20 ;
404+ uint64_t getter : 22 ;
405+ uint64_t setter : 22 ;
406+ };
407+
408+ struct REPropertyImpl {
409+ uint16_t flags;
410+ uint16_t attributes_id;
411+ int32_t name_offset;
412+ };
413+ #pragma pack(pop)
414+
415+ struct ParamList {
416+ uint16_t numParams; // 0x0000
417+ uint16_t invokeID; // 0x0002
418+ uint32_t returnType; // 0x0004
419+ uint32_t params[1 ]; // 0x0008
420+ };
421+
422+ struct REField {
423+ uint64_t declaring_typeid : TYPE_INDEX_BITS;
424+ uint64_t impl_id : TYPE_INDEX_BITS;
425+ uint64_t field_typeid : TYPE_INDEX_BITS;
426+ uint64_t init_data_hi : 6 ;
427+ uint64_t rest2 : 1 ;
428+ };
429+
430+ struct REFieldImpl {
431+ uint16_t attributes_id;
432+ uint16_t unk : 1 ;
433+ uint16_t flags : 15 ;
434+ uint32_t offset : 26 ;
435+ uint32_t init_data_lo : 6 ;
436+ uint32_t name_offset : 28 ;
437+ uint32_t init_data_mid : 4 ;
438+ };
439+
440+ struct GenericListData {
441+ uint32_t definition_typeid : TYPE_INDEX_BITS;
442+ uint32_t num : (32 - TYPE_INDEX_BITS);
443+ uint32_t types[1 ];
444+ };
445+ }
446+
269447namespace tdb74 {
270448struct REMethodDefinition ;
271449struct REMethodImpl ;
0 commit comments