IPB

Здравствуйте, гость ( Вход | Регистрация )

8 страниц V  « < 4 5 6 7 8 >  
Reply to this topicStart new topic
> Инженерный анализ, Reverse Engineering
tolich
сообщение 22 Mar 2016, 07:59
Сообщение #101

😸🧡✊✌️
Сообщений: 16 521
Спасибо сказали: 3472 раза




Может, я чего-то не понимаю, но разве проблема вообще стоит?


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 22 Mar 2016, 19:00 (Сообщение отредактировал AlexSpl - 22 Mar 2016, 19:45)
Сообщение #102

Immortal
Сообщений: 798
Спасибо сказали: 555 раз




В Двойке есть флаги: int gbGameOver (если мы на экране победы или поражения), int gbInCombat (если в бою), int bEnteringTown (если открыто окно города) и т.п. Нужно найти в Тройке аналогичные (или лучше один: "мы на карте приключений") или другим образом определить идёт ли игра на карте (началась, но ещё не завершена) в произвольном месте кода.
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 23 Mar 2016, 21:17
Сообщение #103

Immortal
Сообщений: 798
Спасибо сказали: 555 раз




Пока тупо сделал проверку MaxMP на ноль для Героев 3 (номера дерева прокачки в Героях 1, 2). Всё равно это полумера. Если начинаешь новую игру, то структуры остаются инициализированными, пока не перейдёшь к выбору карты. Следовательно, на них нельзя опираться. Нужно точно знать, в меню я или нет. Неужели никто не знает? Если не желаете делиться информацией, пойму. Хотя с чего бы это?
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 23 Mar 2016, 22:25
Сообщение #104

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20606 раз




Нет, ну не **. Есть обсуждения же тред, есть еще куча прочих тредов, нет, надо писать в справочные.

Цитата(хэлп эры)
PROCEDURE GetGameState (VAR GameState: TGameState); STDCALL;
Gets the current state of the game as a pair of dialog identifiers—the main parent and current dialogs. 0 - no dialogs have been created yet. This function is useful for determining in which window a key was pressed.


Цитата(код эры)
Код
  PPAdvManager  = ^PAdvManager;
  PAdvManager   = ^TAdvManager;
  TAdvManager   = PACKED RECORD
    Dummy:            ARRAY [0..79] OF BYTE;
    RootDlgIdPtr:     PPINTEGER;
    CurrentDlgIdPtr:  PPINTEGER;
    (* Dummy *)
  END; // .RECORD TAdvManager


  AdvManagerPtr:  PPAdvManager  = Ptr($6992D0);


PROCEDURE GetGameState (OUT GameState: TGameState);
BEGIN
  IF AdvManagerPtr^.RootDlgIdPtr <> NIL THEN BEGIN
    GameState.RootDlgId :=  AdvManagerPtr^.RootDlgIdPtr^^;
  END // .IF
  ELSE BEGIN
    GameState.RootDlgId :=  0;
  END; // .ELSE
  IF AdvManagerPtr^.CurrentDlgIdPtr <> NIL THEN BEGIN
    GameState.CurrentDlgId  :=  AdvManagerPtr^.CurrentDlgIdPtr^^;
  END // .IF
  ELSE BEGIN
    GameState.CurrentDlgId  :=  0;
  END; // .ELSE
END; // .PROCEDURE GetDialogsIds

или же сразу


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 23 Mar 2016, 23:16 (Сообщение отредактировал AlexSpl - 23 Mar 2016, 23:23)
Сообщение #105

Immortal
Сообщений: 798
Спасибо сказали: 555 раз




У меня была такая идея. Но в Героях 2 недостаточно, чтобы int iDialogNestCount был равен 0. В игре мы же можем начинать различные диалоги, но игра же не прерывается.

Допустим, в Тройке этой информации достаточно. Как получить AdvManagerPtr^.RootDlgIdPtr^^ и AdvManagerPtr^.CurrentDlgIdPtr^^? И какие значения будут соответствовать тому факту, что игра не началась или уже закончилась?
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 23 Mar 2016, 23:52 (Сообщение отредактировал AlexSpl - 23 Mar 2016, 23:56)
Сообщение #106

Immortal
Сообщений: 798
Спасибо сказали: 555 раз




Может, я недостаточно чётко сформулировал проблему. После выбора карты, мы начинаем игру. После "Начать новую игру"/"Загрузить сейв"/победы/проигрыша игра заканчивается. Как определить, что мы [по-прежнему] здесь, а не [* карты больше нет и продолжить игру невозможно*] там?

Не знаю, как в Тройке, но в Двойке это большая проблема, т.к. все игровые структуры не реинициализируются, т.е. хранят данные последней игры, хотя карты уже нет и мы в меню.
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 12 Jun 2016, 00:29 (Сообщение отредактировал feanor - 12 Jun 2016, 00:30)
Сообщение #107

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20606 раз




Шестая ида умеет в экспорт структур в сишные хедеры, так что вот вам из вогобазы.
https://dl.dropboxusercontent.com/u/61759222/HoMM/Heroes3.h

Надо бы, конечно, стандартизировать структуры, хоть тему открывай..


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 03 Aug 2016, 22:58 (Сообщение отредактировал Richter - 03 Aug 2016, 23:04)
Сообщение #108

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




У кого нибудь есть решение ввиде bin файла, либо dll файла или через ERM для отключения экрана Wog'ификации?



--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 04 Aug 2016, 07:26
Сообщение #109

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2377 раз




Сейчас нет игры под рукой, но можешь посмотреть патч в исходниках MoP: BIN-files, файл WoG-options.txt.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery



Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 04 Aug 2016, 10:19 (Сообщение отредактировал igrik - 04 Aug 2016, 10:19)
Сообщение #110

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




*.bin класть в "AfterWoG"
0071010F EB20


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Barin
сообщение 01 May 2017, 11:30 (Сообщение отредактировал Barin - 01 May 2017, 11:32)
Сообщение #111

Member
Сообщений: 84
Спасибо сказали: 70 раз




Поменять координаты здания в экране города сложно? Может уже есть алгоритм. Если не сложно, подскажите как это сделать.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 01 May 2017, 12:30
Сообщение #112

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




Ты вообще темы по UN:C читаешь?
вот © feanor


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Barin
сообщение 01 May 2017, 14:41 (Сообщение отредактировал Barin - 01 May 2017, 14:44)
Сообщение #113

Member
Сообщений: 84
Спасибо сказали: 70 раз




Цитата(igrik @ 01 May 2017, 12:30) *
Ты вообще темы по UN:C читаешь?
вот © feanor


Хорошо, работает для объектов которые можно построить. А как определить подобные декоративные объекты непонятно:

Это деф анимированного водопада из Сопряжения. Его конечно же можно сделать прозрачным фоном, чтобы не отображался, но всё-таки, есть идея как его сместить?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 01 May 2017, 15:52
Сообщение #114

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




Цитата(Barin @ 01 May 2017, 14:41) *
Хорошо, работает для объектов которые можно построить. А как определить подобные декоративные объекты непонятно:

Сначала проверь указанное, а потом говори что "непонятно". Откуда эта инфа, что можно менять только строящиеся объекты? Ты проверял? Конечно нет. Поэтому и не знаешь, что можно.
И в сотый раз тебе повторять уже надоело - есть специальные темы для обсуждений. А эти темы для чистой информации. Смекаешь?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 13 Jul 2017, 15:19 (Сообщение отредактировал hippocamus - 18 Jan 2019, 20:49)
Сообщение #115

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20606 раз




Деревья строительства и маски заменяющих друг друга объектов, дамп


CODE
#define BLD_ID_MAGE1 0
#define BLD_ID_MAGE2 1
#define BLD_ID_MAGE3 2
#define BLD_ID_MAGE4 3
#define BLD_ID_MAGE5 4
#define BLD_ID_TAVERN 5
#define BLD_ID_WHARF 6
#define BLD_ID_FORT1 7
#define BLD_ID_FORT2 8
#define BLD_ID_FORT3 9
#define BLD_ID_HALL1 10
#define BLD_ID_HALL2 11
#define BLD_ID_HALL3 12
#define BLD_ID_HALL4 13
#define BLD_ID_MARKET 14
#define BLD_ID_SILO 15
#define BLD_ID_SMITH 16
#define BLD_ID_SPEC17 17
#define BLD_ID_HORDE1 18
#define BLD_ID_HORDE1U 19
#define BLD_ID_WHARF2 20
#define BLD_ID_SPEC21 21
#define BLD_ID_SPEC22 22
#define BLD_ID_SPEC23 23
#define BLD_ID_HORDE2 24
#define BLD_ID_HORDE2U 25
#define BLD_ID_GRAIL 26
#define BLD_ID_DECOR27 27
#define BLD_ID_DECOR28 28
#define BLD_ID_DECOR29 29
#define BLD_ID_DWELL1 30
#define BLD_ID_DWELL2 31
#define BLD_ID_DWELL3 32
#define BLD_ID_DWELL4 33
#define BLD_ID_DWELL5 34
#define BLD_ID_DWELL6 35
#define BLD_ID_DWELL7 36
#define BLD_ID_DWELL1U 37
#define BLD_ID_DWELL2U 38
#define BLD_ID_DWELL3U 39
#define BLD_ID_DWELL4U 40
#define BLD_ID_DWELL5U 41
#define BLD_ID_DWELL6U 42
#define BLD_ID_DWELL7U 43

int Dependencies0[] = {
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_WHARF, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SPEC22, BLD_ID_TAVERN, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SMITH, -1,
BLD_ID_SPEC17, BLD_ID_WHARF, -1,
BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MAGE1, BLD_ID_MARKET, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4, BLD_ID_DWELL1, BLD_ID_SMITH, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL3, BLD_ID_DWELL4, -1,
BLD_ID_HORDE1, BLD_ID_DWELL3, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL3U, -1,
BLD_ID_SPEC21, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6, BLD_ID_SPEC21, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL5, BLD_ID_DWELL4, BLD_ID_MAGE1, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};


int Dependencies1[] = {
BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_SPEC17, -1,
BLD_ID_SPEC21, BLD_ID_SPEC17, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MAGE1, BLD_ID_SMITH, BLD_ID_MARKET, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL2, -1,
BLD_ID_SPEC22, BLD_ID_HORDE1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL2U, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL5, BLD_ID_DWELL3, -1,
BLD_ID_HORDE2, BLD_ID_DWELL5, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_HORDE2U, BLD_ID_DWELL5U, -1,
BLD_ID_DWELL4, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7, BLD_ID_DWELL6, BLD_ID_MAGE2, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, BLD_ID_MAGE3, -1,
BLD_ID_GRAIL, -1,
-100
};


int Dependencies2[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC21, BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_MAGE1, -1,
BLD_ID_SPEC22, BLD_ID_MAGE1, -1,
BLD_ID_SPEC23, BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SPEC17, BLD_ID_MARKET, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL2, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL2U, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4, BLD_ID_DWELL2, BLD_ID_DWELL3, BLD_ID_MAGE1, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_SPEC22, -1,
BLD_ID_DWELL5, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};


int Dependencies3[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC21, BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_SPEC22, BLD_ID_FORT2, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_SPEC23, BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MARKET, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_HORDE2, BLD_ID_DWELL3, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_HORDE2U, BLD_ID_DWELL3U, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_MAGE1, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL5, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, BLD_ID_MAGE2, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};


int Dependencies4[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC17, BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_WHARF, -1,
BLD_ID_MAGE1, -1,
BLD_ID_SPEC21, BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_SPEC22, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1, BLD_ID_SPEC22, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_SPEC22, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_SPEC21, -1,
BLD_ID_DWELL5, BLD_ID_DWELL2, BLD_ID_MAGE1, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};


int Dependencies5[] = {
BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_SPEC22, -1,
BLD_ID_SPEC23, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SPEC17, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_SPEC21, BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MARKET, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4, BLD_ID_DWELL3, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, BLD_ID_MAGE2, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, BLD_ID_MAGE3, -1,
BLD_ID_GRAIL, -1,
-100
};


int Dependencies6[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC17, BLD_ID_FORT1, -1,
BLD_ID_SPEC23, BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_SPEC22, BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SPEC21, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MAGE1, BLD_ID_MARKET, BLD_ID_SMITH, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL5, BLD_ID_DWELL2, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, BLD_ID_SMITH, -1,
BLD_ID_DWELL4, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_MAGE1, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_GRAIL, -1,
-100
};


int Dependencies7[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC21, BLD_ID_FORT1, -1,
BLD_ID_SPEC22, BLD_ID_SPEC21, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_SPEC17, BLD_ID_HALL2, BLD_ID_SPEC21, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1,
BLD_ID_WHARF, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, BLD_ID_TAVERN, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL6, BLD_ID_DWELL2, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5, BLD_ID_DWELL3, BLD_ID_DWELL2, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, BLD_ID_SILO, -1,
BLD_ID_DWELL7, BLD_ID_DWELL6, BLD_ID_DWELL4, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};


int Dependencies8[] = {
BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_WHARF, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SPEC17, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_SPEC21, BLD_ID_MAGE1, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, BLD_ID_MAGE1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, BLD_ID_MAGE1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_DWELL2U, -1,
BLD_ID_DWELL5, BLD_ID_DWELL3, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, BLD_ID_MAGE2, -1,
BLD_ID_DWELL7, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};


int ObsolutionsAll[] = {
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_HALL2, BLD_ID_HALL1, -1,
BLD_ID_HALL3, BLD_ID_HALL2, -1,
BLD_ID_HALL4, BLD_ID_HALL3, -1,
BLD_ID_HORDE1U, BLD_ID_HORDE1, -1,
BLD_ID_HORDE2U, BLD_ID_HORDE2, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
-100
};


int Obsolutions0[] = {
BLD_ID_SPEC22, BLD_ID_TAVERN, -1,
BLD_ID_HORDE1, BLD_ID_DWELL3, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL3U, BLD_ID_HORDE1, -1,
-100
};


int Obsolutions1[] = {
BLD_ID_HORDE1, BLD_ID_DWELL2, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL2U, BLD_ID_HORDE1, -1,
BLD_ID_HORDE2, BLD_ID_DWELL5, -1,
BLD_ID_HORDE2U, BLD_ID_DWELL5U, BLD_ID_HORDE2, -1,
BLD_ID_SPEC21, BLD_ID_SPEC17, -1,
-100
};


int Obsolutions2[] = {
BLD_ID_HORDE1, BLD_ID_DWELL2, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL2U, BLD_ID_HORDE1, -1,
-100
};


int Obsolutions3[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
BLD_ID_HORDE2, BLD_ID_DWELL3, -1,
BLD_ID_HORDE2U, BLD_ID_DWELL3U, BLD_ID_HORDE2, -1,
-100
};


int Obsolutions4[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};


int Obsolutions5[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};


int Obsolutions6[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};


int Obsolutions7[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};


int Obsolutions8[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};

//патчим буквально сразу в DllMain, иначе данные уйдут в битовое поле
*(int*)0x004EB816 = (int)Dependencies0;

*(int*)0x004EB8B3 = (int)Dependencies1;

*(int*)0x004EB971 = (int)Dependencies2;

*(int*)0x004EBA39 = (int)Dependencies3;

*(int*)0x004EBA48 = (int)Dependencies4;

*(int*)0x004EBA5C = (int)Dependencies5;

*(int*)0x004EBA70 = (int)Dependencies6;

*(int*)0x004EBA84 = (int)Dependencies7;

*(int*)0x004EBA98 = (int)Dependencies8;

*(int*)0x004EBAC9 = (int)ObsolutionsAll;
*(int*)0x004EBB04 = (int)ObsolutionsAll;
*(int*)0x004EBB3F = (int)ObsolutionsAll;
*(int*)0x004EBB7A = (int)ObsolutionsAll;
*(int*)0x004EBC74 = (int)ObsolutionsAll;

*(int*)0x004EBAD8 = (int)Obsolutions0;

*(int*)0x004EBB13 = (int)Obsolutions1;

*(int*)0x004EBB89 = (int)Obsolutions2;

*(int*)0x004EBB4E = (int)Obsolutions3;

*(int*)0x004EBB98 = (int)Obsolutions4;

*(int*)0x004EBBA7 = (int)Obsolutions5;

*(int*)0x004EBBB6 = (int)Obsolutions6;

*(int*)0x004EBBC5 = (int)Obsolutions7;

*(int*)0x004EBBD4 = (int)Obsolutions8;

Экраны холла будут когда-нибудь позже

Ну и порождающий это говнокод, потому что писать программы, чтобы они писали программы - это весело, а еще так можно убить свою профессию с её рабочим местом

CODE

string GetDescByID(int id)
{
if(id ==-1) return "-1";
if(id ==-100) return "-100";

string[] arr =
{
"MAGE1",
"MAGE2",
"MAGE3",
"MAGE4",
"MAGE5",

"TAVERN", //5

"WHARF", //6

"FORT1", //7
"FORT2",
"FORT3",

"HALL1", //10
"HALL2",
"HALL3",
"HALL4",

"MARKET", //14
"SILO",

"SMITH", //16

"SPEC17",

"HORDE1", //18
"HORDE1U",

"WHARF2", //20
"SPEC21",
"SPEC22",
"SPEC23",

"HORDE2",
"HORDE2U",

"GRAIL",

"DECOR27",
"DECOR28",
"DECOR29",

"DWELL1",
"DWELL2",
"DWELL3",
"DWELL4",
"DWELL5",
"DWELL6",
"DWELL7",

"DWELL1U",
"DWELL2U",
"DWELL3U",
"DWELL4U",
"DWELL5U",
"DWELL6U",
"DWELL7U"
};

return "BLD_ID_"+arr[id];
}


int ReadInt(byte[] arr, ref int offset)
{
int ret = arr[offset] | arr[offset+1] << 8 | arr[offset+2] << 16 | arr[offset+3]<<24;
offset+=4;
return ret;
}

List<int> FindRefs(byte[] arr, int addr)
{
List<int> ret = new List<int>();
for(int i =0; i!=arr.Length-3; i++)
{
if((arr[i] == (addr & 0xFF)) &&
(arr[i+1] == ((addr>>8) & 0xFF)) &&
(arr[i+2] == ((addr>>16) & 0xFF)) &&
(arr[i+3] == ((addr>>24) & 0xFF)))
{
ret.Add(i+0x400000);
}

}
return ret;
}


string ProduceTable(byte[] file, int tree_offset, string name)
{
int v_tree_offset = tree_offset- 0x400000;


string s = "";
s += "\r\n";
s += "int "+name+"[] = {\r\n";

int i = 0;
do
{
i = ReadInt(file,ref v_tree_offset);
s += '\t';
s += GetDescByID(i);


if(i!=-100) s += ",";
if(i<0) s += Environment.NewLine;


}while( i != -100);
s += "};";
s += "\r\n";
return s;
}


string ProduceHooks(byte[] file, int tree_offset, string name)
{
string t = "\r\n";
foreach(int refaddr in FindRefs(file,tree_offset))
{

t+= string.Format("*(int*)0x{0:X8} = (int){1};\r\n", refaddr, name);
}
return t;
}

void MainFormLoad(object sender, EventArgs e)
{
var file = File.ReadAllBytes(@"d:\\h3era24\\h3era.exe");


string[] names = {
"Dependencies0",
"Dependencies1",
"Dependencies2",
"Dependencies3",
"Dependencies4",
"Dependencies5",
"Dependencies6",
"Dependencies7",
"Dependencies8",
"ObsolutionsAll",
"Obsolutions0",
"Obsolutions1",
"Obsolutions2",
"Obsolutions3",
"Obsolutions4",
"Obsolutions5",
"Obsolutions6",
"Obsolutions7",
"Obsolutions8"
};


int[] addrs =
{
0x63EC80,
0x63EE24,
0x63EFE4,
0x63F1A0,
0x63F364,
0x63F51C,
0x63F6D0,
0x63F870,
0x63FA14,
0x63FBC4,
0x63FCA0,
0x63FCCC,
0x63FD14,
0x63FD34,
0x63FD70,
0x63FD90,
0x63FDB0,
0x63FDD0,
0x63FDF0
};

for(int j=0; j!=44; j++)
{
textBox1.Text += string.Format("#define\t{0}\t{1}\r\n",GetDescByID(j),j);
}

for(int j = 0; j!=19; j++)
{
textBox1.Text += ProduceTable(file,addrs[j], names[j]);
textBox1.Text +=Environment.NewLine;
}
for(int j = 0; j!=19; j++)
{
textBox1.Text += ProduceHooks(file,addrs[j], names[j]);
}


}


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Ben
сообщение 25 Jul 2017, 21:20
Сообщение #116

Power Member
Сообщений: 198
Спасибо сказали: 134 раза




Поисследовал, как изменить коэффициент первичного навыка защиты.
По ряду соображений хочется сделать его не 2,5%, а 3,5% - снижение ущерба от атаки.

В воговской базе соответствующих комментариев нет.

Обнаружилось, что коэффициент 0.025 нужно менять по адресу 0x0063B8C0

Ограничение на общее снижение ущерба (сейчас 70%) правится по адресу 0x0063B8B8.
Величину 0.3 меняю на 0.2

Дополнительно это дело захардкожено в одной процедуре (2 ассемблерных мува со значениями).
Нужно поправить значения в 0x00443913 и 0x00443918


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 18 Jan 2019, 10:18 (Сообщение отредактировал Richter - 18 Jan 2019, 13:46)
Сообщение #117

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Образовался вопрос, где хранится статус "выбрано существо или нет" и как его убрать (жёлтая рамка) в окне героя? Надеюсь с темой для поста не ошибся)


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 18 Jan 2019, 17:54
Сообщение #118

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




Цитата(Richter @ 18 Jan 2019, 10:18) *
Образовался вопрос, где хранится статус "выбрано существо или нет" и как его убрать (жёлтая рамка) в окне героя? Надеюсь с темой для поста не ошибся)

!!UN:C6911880/4/?y1;


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 27 Jan 2019, 09:46
Сообщение #119

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Понимаю тема не для вопросов, однако такой вопрос не нашёл более где задать. Появилась необходимость в использовании свободных адресов в exe. Какие диапазоны могу использовать, чтобы не нарушить код после запуска и во время игры?
Необходимо 3800 адресов.
Вот пример:
Код
008CA2E0    0000            ADD BYTE PTR DS:[EAX],AL
008CA2E2    0000            ADD BYTE PTR DS:[EAX],AL
008CA2E4    0000            ADD BYTE PTR DS:[EAX],AL
008CA2E6    0000            ADD BYTE PTR DS:[EAX],AL
..................
00639D55      00            DB 00
00639D56      00            DB 00
00639D57      00            DB 00
00639D58      00            DB 00


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 27 Jan 2019, 10:47
Сообщение #120

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2377 раз




Зачем?


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post

8 страниц V  « < 4 5 6 7 8 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 22 January 2026 - 13:00
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика