Current time: 22.10.2018, 10:50 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Typhon v. 2.6
» Инструмент мододелов из MoP для ЭРЫ
Author Message
MOP Offline

Posts: 1336
Post: #136

Я это и имел в виду:
Quote:меняет и старую структуру
Правда, едва не затупил, поставив сначала хук на 732CCFh, а не на 732CE1h.


Я на Лит-Нете
(This post was last modified: 25.11.2017 17:49 by MOP.)
25.11.2017 17:46
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10639
Post: #137

Превосходно Rolleyes
Я попробую тогда немного поиграть с включённым Тифоном + посмотрю, действительно ли изумрудная башня глючит. Было бы замечательно включить такой инструмент в базовую поставку Эры в качестве обязательного. Перестанут работать моды с аметистом, но их ведь можно будет преобразовать при желании.
25.11.2017 17:55
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1336
Post: #138

(25.11.2017 17:55)Berserker Wrote:  посмотрю, действительно ли изумрудная башня глючит.
Проверял. Реально глючит и вылетает из-за команды UN:N, хотя она использует не прямой адрес структуры монстров, а указатель. Страннота. Попробую сегодня разобраться.


Я на Лит-Нете
25.11.2017 17:58
Find all posts by this user Quote this message in a reply
Ethereal Offline

Posts: 138
Post: #139

(25.11.2017 15:41)Berserker Wrote:  Можно будет попробовать инструмент в базовую поставку интегрировать, только вопрос совместимости всё же попробовать решить.

Тогда стоит обратить внимание на Dwellings.dll, на который гавкает и Касперский, и Аваст. Понятно, что можно внести в исключения, но ведь можно сделать так, что бы этого не требовалось?
(This post was last modified: 25.11.2017 18:05 by Ethereal.)
25.11.2017 18:03
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10639
Post: #140

Она вызывает GetMonName:
Code:
char *GetMonName(int number,int oneMORE)
{
  #include "templ.h"
  char *zret;
  int shifter;
  if(oneMORE) shifter=4; else shifter=0;
  __asm{
    mov    ecx,number //??? = тип монстра
    lea    edx,[8*ecx]
    sub    edx,ecx
    lea    ecx,[ecx+4*edx]
    mov    edx,0x6747B0
    mov    edx,[edx]
    add    edx,shifter
    mov    eax,[edx+4*ecx+0x14] //-> название монстра ед число
//  mov    ecx,[edx+4*ecx+18] -> название монстра мн число
    mov    zret,eax
  }
  RETURN(zret)
}


Ethereal, либо Мастера попросим добавить туда мусора или подключить стандартных библиотек, либо придётся упаковывать чем-то и проверять. Но что-то делать точно, жалобы отовсюду, как на мой загрузчик AngelRun (но с тем-то понятно, подгрузка любой dll в любой процесс).
25.11.2017 18:08
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10639
Post: #141

MOP, подскажи, пожалуйста, ещё. Если предполагается, что будет несколько модов, использующих Тифон, то они все будут биться за общие ресурсы с настройками монстров, заклинаний, городов, так? Эти настройки частично в файлах mop, которые можно было бы на лету генерировать, если знать структуру (кол-во записей * размер записи?). Частично в файлах текстовых — имена и описания. Верно?

Если бы в теории Тифон вызывал функции Эры: LoadMopFile, LoadMopTxtFile, которые бы генерировали эти файлы из множества других по принципу модульности (сборки из оригинала и только добавленных/изменённых), то можно было бы использовать несколько модов на базе Тифона?
25.11.2017 18:16
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1336
Post: #142

(25.11.2017 18:08)Berserker Wrote:  Она вызывает GetMonName:
Это понятно. Сама команда по отдельности работает совершенно нормально. Но в !?FU10909 происходит какая-то хрень, так что при закрытии последнего диалога в Башне вместо имени монстра возвращается -1.


Я на Лит-Нете
25.11.2017 18:23
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1336
Post: #143

Фух, исправил. Дело было в резервации ссылок на строки для UN:G1 с 0 в качестве последнего параметра. Я отрубил вообще это копирование в MoP, ибо мне никогда оно не нужно, а по слепому методу сделал так же и в Тифоне. Добавил три таблицы, изменил адреса и лимиты. Изумрудная Башня больше не вылетает.
Берс, если тестируешь, то придётся перезапускать, ибо копирование ссылок на строки идёт в инструкции.
НУ что, где там ещё баги?
Image: Challenge_Accepted.png


Я на Лит-Нете
(This post was last modified: 25.11.2017 20:20 by MOP.)
25.11.2017 19:58
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1336
Post: #144

(25.11.2017 18:16)Berserker Wrote:  MOP, подскажи, пожалуйста, ещё. Если предполагается, что будет несколько модов, использующих Тифон, то они все будут биться за общие ресурсы с настройками монстров, заклинаний, городов, так? Эти настройки частично в файлах mop, которые можно было бы на лету генерировать, если знать структуру (кол-во записей * размер записи?). Частично в файлах текстовых — имена и описания. Верно?

Если бы в теории Тифон вызывал функции Эры: LoadMopFile, LoadMopTxtFile, которые бы генерировали эти файлы из множества других по принципу модульности (сборки из оригинала и только добавленных/изменённых), то можно было бы использовать несколько модов на базе Тифона?
Понятно, куда ты клонишь, но я не знаю, возможно ли это. Это различать стандартных и добавленных как-то надо, а ведь и старых тоже люди правят. Ещё править скрипты и плагины под сгенерированные на лету номера. Да и лимит существ не такой большой - 1000 или максимум 1024 (из-за хранения типа существа в 10-битовой ячейке).
В общем, фантастика, на мой взгляд.


Я на Лит-Нете
25.11.2017 20:04
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10639
Post: #145

Quote:Фух, исправил.
Молодца! А то по коду хоть убей всё чисто )

Quote:НУ что, где там ещё баги?
Накопаем! Spiteful

Quote:В общем, фантастика, на мой взгляд.
А можешь на вскидку сказать структуру основных mop-файлов. Там просто структуры городов/монстров * кол-во?
25.11.2017 21:18
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1336
Post: #146

Ага, сам же и нашёл. В конце функции загрузки параметров существ надо было mov dword [27F9A34h], 0 поставить, иначе все имена сбиваются как при рестарте, так и при загрузке сейва.
Вот теперь с именами всё.
(25.11.2017 21:18)Berserker Wrote:  А можешь на вскидку сказать структуру основных mop-файлов. Там просто структуры городов/монстров * кол-во?
Нет, там всё не так, как на самом деле. И даже структура файла существ нигде не зафиксирована.


Я на Лит-Нете
(This post was last modified: 25.11.2017 21:44 by MOP.)
25.11.2017 21:42
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10639
Post: #147

Quote:Вот теперь с именами всё.
Перекачивать по ссылкам в первом посте? )

Quote:Нет, там всё не так, как на самом деле. И даже структура файла существ нигде не зафиксирована.
Суровая школа )) В теории я могу хранить стандартные mop-файлы настроек, брать mop-bin файлы с разными именами из модов в виде патчей на оригинал (размеры то фиксированные?) и создавать на лету общие файлы *.mop, которые скармливать Тифону через АПИ. Если что, думаю копать в подобную сторону. Там и нужна-то только приблизительная страктура в виде смещений и размеров блоков.
25.11.2017 23:01
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1336
Post: #148

(25.11.2017 23:01)Berserker Wrote:  Перекачивать по ссылкам в первом посте? )
Да.
(25.11.2017 23:01)Berserker Wrote:  Там и нужна-то только приблизительная страктура в виде смещений и размеров блоков.
Просплюсь, отдохну - может, нарою.


Я на Лит-Нете
25.11.2017 23:03
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10639
Post: #149

Хорошо, спасибо Ab
25.11.2017 23:34
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1336
Post: #150

Структура MonstersSetup.mop:
Ammo.mop - названия снарядов, 16 байт на существо.
ImposedSpells.mop - наложенные заклинания, 3 заклинания + 3 уровня, всего 6 байт на существо.
DefenseBonus.mop - бонус защиты при вставании в оборону, 1 байт на существо.
Lang. Первый байт - язык редактора и игры (0 - английский, 1 - русский). Следом слово для хранения типа существа, которое было выбрано перед закрытием программы (будет открыто при следующем запуске).
TownsSetup.mop:
Code:
Древо построек                               8 байт * 44 здания * 9 городов             ; 0
Основные обитатели города                    4 байта * 7 уровней * 2 грейда * 9 городов ; +3168
Альтернативные обитатели города              4 байта * 7 уровней * 2 грейда * 9 городов ; +3672


Я на Лит-Нете
26.11.2017 09:21
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2018 MyBB Group