Привет, друзья, я тут заинтересовался темой добавления ландшафтов и постепенно начал искать места в коде, а также функции, которые надо переделать. Информация еще очень сырая, и в будущем я, разумеется, ее дополню. Я не претендую на правильность, любые дополнения или исправления приветствуются. Мне на самом деле очень хочется увидеть в игре новые ландшафты, вот я и решил сделать первый шаг.
Маленький комментарий: там, где стоит значение 0xA, используется либо «меньше» либо «больше/равно».
sub_00401000 – 2 values (401014 – 0xA; 40101E – 0xA)
sub_00401370 – 2 values (40138E – 0xA; 401384 – 0xA)
sub_00410B60 – unknown (похоже есть пара мест, где используется число 8 как последний проходимый ландшафт)
Список ландшафтов:
0 - Грязь
1 - Песок
2 - Трава
3 - Снег
4 - Болото
5 - Скалы
6 - Подземелье
7 - Лава
8 - Вода
9 - Пропасть
Draw_ObjBlocks_0x4114F0 - то же, что и в sub_00410B60. Советую поглядеть, в каких случаях вызывается 404440 (TerrMaskError)
4FD470 GetTerrainOverlayTypeOfMapItem — (4FD51E - 08) ??? Возможно тоже относится сюда
Не по теме, но пусть будет:
4FD590 GetTypeOfLandModifier — в этой функции находится switch, в котором проверяются типы накладной почвы для последующего добавления бонуса. Это дело настраивается и через ERM см. BU:G
Code:
switch (GetTerrainOverlayTypeOfMapItem(this))
{
case 46:
result = 1;
break;
case 226:
result = 7;
break;
case 228:
result = 6;
break;
case 229:
result = 9;
break;
case 231:
result = 8;
break;
default:
result = -1;
break;
}
4FF280 DoGetObjectEnterance – 1 value (4FF2A2 – 0x08)
5031B0 LoadMap_SetUpRandomDwellings – 1 value ??? (503302 – 0x08)
503DD0 LoadMap_ReadObjectType – 8 мест (см. циклы do while)
sub_00504290 — тут похоже дофига проверок
sub_00504550 — тоже немало, так что пока без деталей
sub_005056B0 — такая же ситуация
505C60 AddDeleteToSquarePassible — такая же ситуация
506170 LoadMap_SetupMapItemsDrawListsForPosition - «506278 cmp eax, 8» Проверка на воду???
sub_00506570 — 1 value (5065ED – 0xA)
sub_005066D0 — 1 value (506879 – 0xA)
sub_00506E70 — 1 value (506E7C – 0xA)
Осторожно, много эмоционального удивления! Если бы я просто знал о том, что следующая сотня следующие две сотни функций существуют, то не стал бы принимать это близко к сердцу, но я не знал… Оригинальные комментарии сохранены.
"Далее идет десяток идентичных функций, смысл создания которых мне пока не ясен. Если все вы целом одно и тоже, то почему бы не использовать одну с парой логических операторов. Накрайняк ведь можно было сунуть данную проверку в какую-то отдельную функцию и не копировать ее кучу раз..."
sub_0050AFF0 – 2 values (50B004 – 0xA; 50B00E – 0xA)
sub_0050B050 – 2 values (50B064 – 0xA; 50B06E – 0xA)
sub_0050B0B0 – 2 values (50B0C4 – 0xA; 50B0CE – 0xA)
sub_0050B120 – 2 values (50B134 – 0xA; 50B13E – 0xA)
sub_0050B180 – 2 values (50B194 – 0xA; 50B19E – 0xA)
sub_0050B1E0 – 2 values (50B1F4 – 0xA; 50B1FE – 0xA)
sub_0050B240 – 2 values (50B254 – 0xA; 50B25E – 0xA)
sub_0050B2A0 – 2 values (50B2B4 – 0xA; 50B2BE – 0xA)
sub_0050B300 – 2 values (50B314 – 0xA; 50B31E – 0xA)
sub_0050B360 – 2 values (50B374 – 0xA; 50B37E – 0xA) — после нахождения данной функции я было порадовался, что этот маразм заканчивается, но нет… Он только начинался...
sub_0050DC80 – 2 values (50DC94 – 0xA; 50DC9E – 0xA)
sub_0050DCE0 – 2 values (50DCF4 – 0xA; 50DCFE – 0xA)
sub_0050DD40 – 2 values (50DD54 – 0xA; 50DD5E – 0xA)
sub_0050DDB0 – 2 values (50DDC4 – 0xA; 50DDCE – 0xA)
sub_0050DE10 – 2 values (50DE24 – 0xA; 50DE2E – 0xA)
sub_0050DE70 – 2 values (50DE84 – 0xA; 50DE8E – 0xA)
sub_0050DED0 – 2 values (50DEE4 – 0xA; 50DEEE – 0xA)
sub_0050DF30 – 2 values (50DF44 – 0xA; 50DF4E – 0xA)
sub_0050DF90 – 2 values (50DFA4 – 0xA; 50DFAE – 0xA)
sub_0050DFF0 – 2 values (50E004 – 0xA; 50E00E – 0xA)
----------------------------------------------------------------------------------------------
sub_00512910 – 2 values (512924 – 0xA; 51292E – 0xA) – дальше я не проверял внимательно, но вроде как, начиная отсюда, опять пойдут точно такие же функции. Смещение до следующей функции как и прежде 0х60 (местами 0х70), до первой проверки (байт со значением) — 0х14, до второй - 0х1Е
Функции:
sub_00512970, sub_005129D0, sub_00512A40, sub_00512AA0, sub_00512B00, sub_00512B60, sub_00512BC0, sub_00512C20, sub_00512C80
----------------------------------------------------------------------------------------------
sub_005130F0, sub_00513150, sub_005131B0, sub_00513220, sub_00513280, sub_005132E0, sub_00513340, sub_005133A0, sub_00513400, sub_00513460
----------------------------------------------------------------------------------------------
sub_00516360, sub_005163C0, sub_00516420, sub_00516490, sub_005164F0, sub_00516550, sub_005165B0, sub_00516610, sub_00516670, sub_005166D0
Конца-края не видно!
sub_0051BE40, sub_0051BEA0, sub_0051BF00, sub_0051BF70, sub_0051BFD0, sub_0051C030, sub_0051C090, sub_0051C0F0, sub_0051C150, sub_0051C1B0
----------------------------------------------------------------------------------------------
sub_00523AF0, sub_00523B50, sub_00523BB0, sub_00523C20, sub_00523C80, sub_00523CE0, sub_00523D40, sub_00523DA0, sub_00523E00, sub_00523E60
Зачем понадобилось создавать СТО функций, делающих одно и то же???
sub_005243F0, sub_00524450, sub_005244B0, sub_00524520, sub_00524580, sub_005245E0, sub_00524640, sub_005246A0, sub_00524700, sub_00524760
-----------------------------------------------------------------------------------------------------------
sub_0052C2F0, sub_0052C350, sub_0052C3B0, sub_0052C420, sub_0052C480, sub_0052C4E0, sub_0052C540, sub_0052C5A0, sub_0052C600, sub_0052C660
-----------------------------------------------------------------------------------------------------------
sub_0052D9D0, sub_0052DA30, sub_0052DA90, sub_0052DB00, sub_0052DB60, sub_0052DBC0, sub_0052DC20, sub_0052DC80, sub_0052DCE0, sub_0052DD40
-----------------------------------------------------------------------------------------------------------
sub_0052EBE0, sub_0052EC40, sub_0052ECA0, sub_0052ED10, sub_0052ED70, sub_0052EDD0, sub_0052EE30, sub_0052EE90, sub_0052EEF0, sub_0052EF50
-----------------------------------------------------------------------------------------------------------
sub_0052F9D0, sub_0052FA30, sub_0052FA90, sub_0052FB00, sub_0052FB60, sub_0052FBC0, sub_0052FC20, sub_0052FC80, sub_0052FCE0, sub_0052FD40
-----------------------------------------------------------------------------------------------------------
sub_00530230, sub_00530290, sub_005302F0, sub_00530360, sub_005303C0, sub_00530420, sub_00530480, sub_005304E0, sub_00530540, sub_005305A0
-----------------------------------------------------------------------------------------------------------
sub_00535CD0, sub_00535D30, sub_00535D90, sub_00535E00
-----------------------------------------------------------------------------------------------------------
sub_005360A0, sub_00536100, sub_00536160, sub_005361C0, sub_00536220, sub_00536280
-----------------------------------------------------------------------------------------------------------
sub_0054E390, sub_0054E3F0, sub_0054E450, sub_0054E4C0, sub_0054E520, sub_0054E580, sub_0054E5E0, sub_0054E640, sub_0054E6A0, sub_0054E700
-----------------------------------------------------------------------------------------------------------
sub_0054E780, sub_0054E7E0, sub_0054E840, sub_0054E8B0, sub_0054E910, sub_0054E970, sub_0054E9D0, sub_0054EA30, sub_0054EA90, sub_0054EAF0 – Вот тут я уже понадеялся, что все наконец позади, но… К сожалению, это было не так.
-----------------------------------------------------------------------------------------------------------
sub_005521F0, sub_00552250, sub_005522B0, sub_00552320, sub_00552380, sub_005523E0, sub_00552440, sub_005524A0, sub_00552500, sub_00552560
-----------------------------------------------------------------------------------------------------------
sub_00558A20, sub_00558A80, sub_00558AE0, sub_00558B50, sub_00558BB0, sub_00558C10, sub_00558C70, sub_00558CD0, sub_00558D30, sub_00558D90
-----------------------------------------------------------------------------------------------------------
sub_0055F160, sub_0055F1C0, sub_0055F220, sub_0055F290, sub_0055F2F0, sub_0055F350, sub_0055F3B0, sub_0055F410, sub_0055F470, sub_0055F4D0
-----------------------------------------------------------------------------------------------------------
sub_0055F6E0, sub_0055F740, sub_0055F7A0, sub_0055F810, sub_0055F870, sub_0055F8D0, sub_0055F930, sub_0055F990, sub_0055F9F0, sub_0055FA50, sub_0055FAB0, sub_0055FB10, sub_0055FB70, sub_0055FBE0, sub_0055FC40, sub_0055FCA0, sub_0055FD00, sub_0055FD60, sub_0055FDC0, sub_0055FE20 — двойной блок
-----------------------------------------------------------------------------------------------------------
sub_00567170, sub_005671D0, sub_00567230, sub_005672A0, sub_00567300, sub_00567360, sub_005673C0, sub_00567420, sub_00567480, sub_005674E0
-----------------------------------------------------------------------------------------------------------
sub_00569FD0, ... _______________________________________________________________
Всю эту кучу надо обработать циклами, используя смещения, а лучше всего просто забыть и придумать альтернативу. Как и где данные функции используются — непонятно, но они есть, и это факт.
sub_005143C0 - 1 value (5143DA – 0xA)
sub_00514C70 - 1 value? (514D44 – 8)
sub_005168B0 - 1 value (5168BA – 0xA)
531D80 RMGMapItems_CantPlace – возможно, в данной функции тоже надо кое-что поправить
sub_005321C0 — 5322CF cmp esi, 9 — проверка на пропасть?
sub_00532370 - ?
sub_00537890 — 537D13 cmp dl, 9 — проверка на пропасть?
RMG_005492E0 — вот тут похоже есть интересное, желательно изучить внимательно. Сходу бросилось в глаза: 54998B – 0xA, но там похоже имеются проверки на воду и на что-то еще
54B320 RMG_WriteObjectPrototype – 4 values (54B4B5 – 0xA; 54B500 – 0xA; 54B51C – 0xA; 54B567 – 0xA)
Создал новый глобальный мод: WoG Ultra Edition
(This post was last modified: 30.01.2021 17:06 by Raistlin.)
|