| pobr   
 Posts: 4
 
 | 
			| 
 
				И еще насчет таблиц виртуальных функций, можно сделать еще красивей. На примере класса resource: 
Code:
 struct resource_vtbl{
 resource *(__thiscall *delete)(resource *__hidden this, uint flags);
 };
 
 struct __cppobj resource
 {
 resource_vtbl *__vftable;
 };
 
В псевдокоде будет выглядеть натурально как вызов функции C++.
			 |  | 
	| 23.01.2022 15:18 |  | 
	
		| void_17   
 Posts: 39
 
 | 
			| 
 
				 (23.01.2022 15:10)pobr Wrote:   (23.01.2022 12:21)void_17 Wrote:  Обновил базу до версии BETA 2.0 CSequence это массив указателей:
 
 
 
Code:
 struct CSequence{
 int numFrames;
 int allocatedFrames;
 CSpriteFrame **f;
 };
 
Пока переписывал с RoE, звездочку забыл...   
Сейчас обновлю и еще парочку ошибок исправлю.
  (23.01.2022 15:18)pobr Wrote:  И еще насчет таблиц виртуальных функций, можно сделать еще красивей. 
Хорошая идея кстати говоря, думал об этом, но никак руки не дошли. Чуть позже запилю.
			 
 IDA-База HOMM 3 Discord Server
 
 
				
(This post was last modified: 24.01.2022 07:41 by void_17.)
 |  | 
	| 24.01.2022 07:40 |  | 
	
		| void_17   
 Posts: 39
 
 |  | 
	| 24.01.2022 09:24 |  | 
	
		| pobr   
 Posts: 4
 
 | 
			| 
 
				В классе resource судя по дампу поле Name равно не 16 байт, но четыре байта никогда не используются.
			 |  | 
	| 24.01.2022 09:53 |  | 
	
		| void_17   
 Posts: 39
 
 | 
			| 
 
				Еще раз обновил базу, т.к. в очередной раз наткнулся на собственную невнимательность. Сместились поля дальше worldMap. Пофиксил это дело.
			 
 IDA-База HOMM 3 Discord Server
 
 
				
(This post was last modified: 24.01.2022 13:43 by void_17.)
 |  | 
	| 24.01.2022 13:42 |  | 
	
		| igrik   
   Posts: 2821
 
 | 
			| 
 
				 (24.01.2022 15:38)void_17 Wrote:  Получается, combatManager разобран абсолютно полностью(кроме поля unknown1). Спустя стольких лет.. 
Агонь, мужики! Это очень круто!
UPD:  я не могу быть уверен на 100%, но склоняюсь что тут пропущено 2 байта (если говорить о SoD)
 
Code:
 int iNextActionGridIndex2;uchar iLastDrawGridShade[187];
 uchar iCurDrawGridShade[187];
 .. вот тут пропущено 2 байта (в SOD)
 struct hexcell cell[187];
 int combatTerrain;
 
 game bug fixes extended.dll  ||  My Plugins  ||  My GitHub
 |  | 
	| 25.01.2022 05:59 |  | 
	
		| void_17   
 Posts: 39
 
 | 
			| 
 
				В SoD-овской базе я делал combatManager как раз под SoD, сверяя с тем, что есть у sav-a. Согласно оператору new ( см. функцию InitMainClasses() ), размер combatManager - 0x140EC, что собственно у меня в базе и есть. Да и доступ к переменным не сбивается. Поэтому все ок, не волнуйтесь.
			 
 IDA-База HOMM 3 Discord Server
 
 
				
(This post was last modified: 26.01.2022 08:21 by void_17.)
 |  | 
	| 26.01.2022 08:19 |  | 
	
		| igrik   
   Posts: 2821
 
 | 
			| 
 
				Ты ко мне на вы? И я немного о другом говорю...
 Доступ в базе то не сбивается, потому что эти 2 байта как раз в базе и указаны.
 А в описанном тобой классе - нет. Т.е. нельзя просто взять и сходу использовать указанный класс, что в свою очередь неосвещённых может поставить в тупик. И таких мест далеко не одно (видимо из-за выравнивания).
 
 ... Я о том, что такой важный момент желательно указывать.
 
 game bug fixes extended.dll  ||  My Plugins  ||  My GitHub
 |  | 
	| 26.01.2022 08:53 |  | 
	
		| pobr   
 Posts: 4
 
 | 
			| 
 
				То, что сейчас называется SpriteResourceFile, это не LODFile, как было в Dreamcast версии. Теперь это структура из указателя на имя файла и собственно LODFile (400 байт): 
Code:
 struct LODFileMapItem{
 const char *path;
 LODFile lod;
 };
 
Сам LODFile выглядит так (396 байт):
 
Code:
 struct LODFile{
 FILE *fileptr;
 char LODFileName[256];
 int opened;
 uchar *dataBuffer;
 ulong dataBufferSize;
 int dataItemIndex;
 int dataPos;
 int matchindex;
 LODHeader header;
 int numEntries;
 std::vector subindex;
 };
 
И таких структур 8 штук, возможно массив.
			 |  | 
	| 28.01.2022 12:01 |  | 
	
		| void_17   
 Posts: 39
 
 | 
			| 
 
				@XEPOMAHT, я в скором времени собираюсь релизить очередную версию базу(релиз состоится одновременно с релизом NH3API). Я знаю ты не хочешь обновлять железо и OS, подскажи, какой версией IDA Pro ты пользуешься? Я могу написать питоновский скрипт который позволит импортировать функции и типы.
			 
 IDA-База HOMM 3 Discord Server
 
 |  | 
	| 13.08.2024 18:15 |  | 
	
		| Berserker   
   
   Posts: 16786
 
 |  | 
	| 13.08.2024 23:36 |  | 
	
		| void_17   
 Posts: 39
 
 |  | 
	| 14.08.2024 00:13 |  | 
	
		| void_17   
 Posts: 39
 
 | 
			| 
 
				 (13.08.2024 23:36)Berserker Wrote:  void_17, спасибо большое за труд. 
Рад стараться!     (13.08.2024 23:36)Berserker Wrote:  По поводу API. Ты не смотрели H3Api от RoseKavalier? Может быть стоило его развивать? 
Да, видел. Моя NH3API основывается на моей базе, 90% информации откуда - оригинальная от программистов NWC(точнее от отладочной информации dreamcast RoE). Остальные 10% отреверсенные мною самостоятельно AB/SoD-овские нововведения.
 
H3API RoseKavalier-a основывается на самостоятельном реверсинге в слепую, ещё до того как слили dreamcast версию игры. Плюс у неё другая архитектура и нет соответствующей базы данных. А у меня и база и своя API, целая экосистема считай. Самое главное - что информация во многом 100% достоверна из-за того что досталась от разработчиков. 
Из плюсов для ретрофилов - моя NH3API будет поддерживать старые Visual Studio 2005/2008, а также MinGW GCC(сам компилятор работает на windows XP!) 
 IDA-База HOMM 3 Discord Server
 
 |  | 
	| 14.08.2024 00:18 |  |