XEPOMAHT
Posts: 2356
|
(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: 2356
|
(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: 1349
|
|
03.02.2021 14:01 |
|
Raistlin
Posts: 1349
|
Номер объекта на карте - это ведь последнее поле структуры _MapItem_? Или надо где-то еще смотреть?
Code:
_MapItem_ struc ; (sizeof=0x26, mappedto_32) ; XREF: .rdata:BuildDepends8/o
00000000 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: 2356
|
(05.02.2021 16:42)Raistlin Wrote: если номер объекта хранится в последнем поле, то почему тогда его нужно считывать из первого байта?
В последнем - номер объекта, который моддерам не нужен, это не игровые данные (это для рендера). Внимательнее изучайте структуры (или используйте русские - я пользуюсь русскими).
В первом - сетап или по-нашему - ключевое слово, где находятся сами игровые настройки объекта (разработчики пожмотились на них, увы, поэтому там всё жестко лимитировано, но формат вполне изменяем, например в MoP 2.19 некоторые ключевые слова изменены, чтобы хранить в них больше информации).
|
|
05.02.2021 17:11 |
|
XEPOMAHT
Posts: 2356
|
(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: 1349
|
|
05.02.2021 18:53 |
|