| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (01.02.2021 18:42)Raistlin Wrote:  Собственно, я даже догадался, в чем заключается проблема, но решить я ее не могу. 
Копируй ассемблерный код на берсерк, если не получается написать его самостоятельно.
  (01.02.2021 18:42)Raistlin Wrote:     "lea edx, [eax-1]" означает, что в edx запишется адрес из eax, а затем будет забрана единица, или же, что в edx запишется значение по адресу, хранящемся в eax, со смещением в -1? А может это будет значение по адресу eax, уменьшенное на 1? Подскажите пожалуйста, а то непонятно, как данная команда работает. 
mov edx, eax 
dec edx
			 |  | 
	| 01.02.2021 21:03 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (03.02.2021 01:45)Raistlin Wrote:  Подскажите пожалуйста, где содержится указатель на def объекта? В структуре _MapItem_ я что-то данное поле не вижу... 
MapItem.H3Vector<H3ObjectDraw> objectDrawing - a vector of DEFs to draw on this tile.
 
Если нужна загрузка, то уже здесь:
 
H3ObjectDetails.setup.
 
Само имя дефа для загрузки - в H3ObjectAttributes.defName.
 
Точнее лучше спрашивать у Кавалериста (он хорошо в этом разбирается).
			 
				
(This post was last modified: 03.02.2021 02:01 by XEPOMAHT.)
 |  | 
	| 03.02.2021 01:51 |  | 
	
		| Raistlin   
   
   Posts: 1344
 
 |  | 
	| 03.02.2021 14:01 |  | 
	
		| Raistlin   
   
   Posts: 1344
 
 | 
			| 
 
				Номер объекта на карте - это ведь последнее поле структуры _MapItem_? Или надо где-то еще смотреть? 
Code:
 _MapItem_           struc ; (sizeof=0x26, mappedto_32)      ; XREF: .rdata:BuildDepends8/o00000000 SetUp               dd ?                                    ; XREF: Hero_Show+B6/r
 00000000                                                             ; Hero_Show+C8/w
 00000004 Land                db ?                                    ; XREF: TryToDigGrail:loc_0040EDF7/r
 00000004                                                             ; Cast_SummonBoat+8C/r ...
 00000005 LType               db ?
 00000006 River               db ?
 00000007 RType               db ?
 00000008 Road                db ?
 00000009 RdType              db ?
 0000000A _u1                 dw ?
 0000000C Mirror              db ?                                    ; XREF: AdvMgr_MauseMoove+3D3/r
 0000000C                                                             ; Hero_Show+A9/r
 0000000D Attrib              db ?                                    ; XREF: Hero_Show+BE/w
 0000000E _Bits               dw ?
 00000010 _u2                 dw ?
 00000012 Draw                dd ?                                    ; struct offset (_ODraw_)
 00000016 DrawEnd             dd ?                                    ; struct offset (_ODraw_)
 0000001A DrawEnd2            dd ?                                    ; struct offset (_ODraw_)
 0000001E Type                dd ?                                    ; XREF: AdvMgr_MauseMoove+219/r
 0000001E                                                             ; AdvMgr_MauseMoove+2A6/r ...
 00000022 SubType             dw ?                                    ; XREF: AdvMgr_DwellingVisit+24/r
 00000024 DrawNum             dw ?                                    ; XREF: AdvMap_DeleteObjectOnMap+D/r
 00000026 _MapItem_           ends
Судя по исходникам ERM, _MapItem_ тут как-то используется, но логика мне не совсем понятна. Помогите пожалуйста разобраться    
Code:
 int  v;...
 _MapItem_ *mip=GetMapItem2(MixPos);
 _CMGarden_ *stp=(_CMGarden_ *)mip;
 ...
 case 'N': // N# установить номер (5)
 v=stp->Number;
 Apply(&v,4,Mp,0);
 stp->Number=(Word)v;
 break;
 ...
 // первые 4 байта для магического сада - настройка в 4C
 struct _CMGarden_{ // type 0x37
 unsigned  Number  :  5;
 unsigned _u1      :  1;
 unsigned  ResType :  4; // всегда = 5
 unsigned  HasRes  :  1; // =1 - есть ресурс
 unsigned _u2      : 21;
 };
 Создал новый глобальный мод: WoG Ultra Edition
 |  | 
	| 05.02.2021 15:20 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (05.02.2021 16:42)Raistlin Wrote:  если номер объекта хранится в последнем поле, то почему тогда его нужно считывать из первого байта? 
В последнем - номер объекта, который моддерам не нужен, это не игровые данные (это для рендера). Внимательнее изучайте структуры (или используйте русские - я пользуюсь русскими).
 
В первом - сетап или по-нашему - ключевое слово, где находятся сами игровые настройки объекта (разработчики пожмотились на них, увы, поэтому там всё жестко лимитировано, но формат вполне изменяем, например в MoP 2.19 некоторые ключевые слова изменены, чтобы хранить в них больше информации).
			 |  | 
	| 05.02.2021 17:11 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (05.02.2021 17:17)Raistlin Wrote:  Русские структуры? А где их можно найти, если не секрет? 
В исходниках MoP. Например мапитем:
 
Code:
 struct MapItemконтрольное_слово dd ?    ;0
 тип_почвы db ?        ;4
 подтип_почвы db ?        ;5
 тип_реки db ?        ;6
 подтип_реки db ?        ;7
 тип_дороги db ?        ;8
 подтип_дороги db ?    ;9
 db ?            ;A
 db ?            ;B
 Зеркало db ?        ;C
 маска_доступа db ?    ;D бит 1 - проходимость, 2 - water edge see 0x4FEA32, 10h - вход
 db 16 dup (?); H3Vector<H3ObjectDraw> objectDrawing - a vector of DEFs to draw on this tile
 тип_объекта dd ?        ;1E
 подтип_объекта dw ?    ;22 = _AdvMgr_.monsterCountBattle
 номер_отрисовки dw ?    ;24 = _AdvMgr_.monsterTypeBattle
 ends
 
 ;Зеркало:
 ;tileH      0x01 -    tileV    0x02
 ;riverH        0x04 -    riverH    0x08
 ;roadH        0x10 -    roadV    0x20
 ;can dig    0x40
 ;animated    0x80 (river, water or lava terrain)
 |  | 
	| 05.02.2021 17:26 |  | 
	
		| Raistlin   
   
   Posts: 1344
 
 |  | 
	| 05.02.2021 18:53 |  |