Гипат.org

Флейм - Немножко о движке ПЗ и не только

PZIGOR - 21 июля 2004, 08:06
Цель раскопок:
1. Изучить внутреннюю структуру движка ПЗ и её ресурсов
2. Изменить функциональность игры в нужном направлении
3. Попробовать разблокировать заблокированные функции игрытакие как скилл ( Tame приручение) и т.д.
Инструменты:
1. Softace (куда без него)
2. IDA (крайне крутой дизассемблер)
3. OllyDbg (пригодится)
4. Windasm (для патча незаменим)
Немного о движке:
Написан на языке программирования Visual C++ с использованием библиотеки MFC и седьмой версии DirectX кто не согласен прошу

мативировать.
Здесь и далее будет описываться версия игры 1.6.
Начнём с главного меню (то у каторого на заднем фоне стоит людоет и ходят волк с кабаном).
Структура отвечающая за выполнения действий при нажатии на том или ином пункте меню называется switch(переключатель)
и расположена по адресу 00632DAD (в дизассемблере) и 00232DAD (в шестнадцатиричном редакторе) разница всегда в 00400000.
Структура имеет вид jmp ds:off_633220[eax*4] здесь и далее используются термины дизассемблера IDA.
В зависимости от значения регистра eax переход осуществляется на тот или иной адрес обработчика.
Вот значения регистра и смещение в файле пунктов меню:
1. Новая игра (eax=0) 00632DB4
2. Старая игра (eax=1) 00632E2E
3. Сетевая (eax=5) 006330A9
4. Настройки (eax=3) 00632F25
5. Авторы (eax=4) 00632FD4
6. Выход (eax=2) 00632ED1
В следующий раз опишу как можно изменить функциональность взависимости от необходимости а так же как без скриптов в сингле поменять

стартового героя (Зака) на другого, а так же поменять стартовую карту и выложу патчик с примером.
ЕLF - 21 июля 2004, 12:17
Поддерживаю такую работу. Очень хорошо, что у игровой массы есть хотя бы один человек, непосредственно работающий с кодом игры... :)
PZIGOR - 21 июля 2004, 13:01
А вот и продолжение темы по раскопке движка.
Здесь раскажу как заменить (Зака) на другова персонажа например (rick) он же Великий маг, а так же загрузим карту вместо (Развалин) загрузим

(дорога к знахарке).
Как загрузить другова персонажа?
Почти каждый знает как загрузить персонажа с помощью скриптов:
@CreateParty( 0, "Hero" )
@AddUnitToParty( 0, "Hero::Rick", "Rick" )
@SetCurrentParty( 0, "Hero" )
Теперь загрузка персонажа Rick вместо Зака:
По смещению 0078B0F4 (0038B0F4) распологается строковый ресурс HERO в шестнадцатиричном виде выглядит так (48 65 72 6F)
это значение заменим на Rick (52 69 63 6B) теперь если загрузить сингл нажав на новая игра то вместо Зака появится фигура персонажа Великого

мага но с именем Зак.
Как избавиться от имени Зак?
Очень просто меняем значение по адресу 0078B0FC (0038B0FC) Human Hero (48 75 6D 61 6E 20 48 65 72 6F) на Rick (52 69 63 6B)
Теперь при загрузке изменится и имя персонажа.
А теперь разберёмся с картой
@LeaveToZone( 0, "gz2g", 30 )
Для этого заменяем по адресу 0078B0EC(0078B0EC) заменяем строку gz1g (67 7A 31 67) на gz2g (67 7A 32 67)
Всё теперь можете загружать.
А теперь о недостатках строковые ресурсы распологаются друг за другом с небольшим запасом и иногда не влазит строка для замены и из этого

положения есть выходы
1. Загружать строку из реестра дописав в exeшнике функцию для обработки строки из реестра
2. Загрузить из отдельного файла или заменить адрес перехода но это всё будет папозже и даже можно выбирать порядок следования карт или

дабовлять свои.
На этом пока всё. Патч пример прилагается.!!!!!!!!!
Robin - 21 июля 2004, 13:29
Если честно, то пока ничего особенного ;)
Очень интересует непосредственное внедрение в движок и
добавления своего кода.
PZIGOR - 21 июля 2004, 13:38
Я же написал вначале что именно для этого я и затеял это всё чтобы внедрять свой код но для этого его надо ещё и написать а я больше собственно по разбору кода а не по его написанию по этому и хотелось поработать с тем кто сможет этот код написать а уж я со своей стороны попытаюсь его внедрить в программу в нужном месте.
Была идея покапаться перках например (tame) но честно говоря с базой пока работаю не очень много времени уходит на разбор кода.
Может у кого есть какие наработки под изменение движка просьба писать сюда.!!!!!!!!
Robin - 21 июля 2004, 14:56
PZIGOR
Посмотри еще обращение к ресурсным файлам. Как это происходит?
Altair - 21 июля 2004, 15:24
Кстати, было бы неплохо избавиться от одного глюка в игре (хотя может он не в самой игре, а в стартёре, точно не знаю).
Суть глюка:
Допустим мы с кем-нибудь деремся (вдвоем-втроем и т.д.) Допустим какой-нить тигр долбанул напарника и напарник полу-мертв, его надо вылечить, а маны у меня нет. Я быстро жму на лечение (клавиатурой) и кликаю мышкой по нему. Делаю я это много раз. Так вот, маны у меня нет, зато есть бутылка! И почему-то напарник вылечивается бутылкой :/ Такая же фигня получается если выбирать любое другое заклинание и кликать на врага, получается, что я лечу врага бутылками...

з.ы. Это все работает только в том случае, если используются заклинания под номерами 1-4.
Dark Angil - 21 июля 2004, 15:42
Ето не совсем глюк. В программулине задана такая вещ: если у тебя нету манны на произнесение закла, ПЗ автоматически ищет у тебя бутылку идентичного свойства, во всяком случае с лечением такая вот финче происходит.
Если отрубить функцию поиска бутылей, то и "баг " этот может исчезнуть, если нет, то проблема в стартёре. Т.К. при стандартном запуске ПЗ такая штука не наблюдается (во всяком случае у меня). :D
Altair - 21 июля 2004, 20:26
Я же написал, что такая херь не только с лечением происходит.. Я вот недавно врага молнией мочил (молния была под номером 2), так вот много раз нажимал, враг вылечился второй бутылкой (у бутылок отсчет идет справа налево).
PZIGOR - 22 июля 2004, 06:31
Специально для ELFа и noonа посмотрел насчёт здоровия частей тела так вот как осуществляется вычисления.
1. Определяется какая атака на юнита прямая (непосредственная атака юнита оружием или заклами) was attacked by или на определённое место XY (атака диапазона каторая осуществляется заклами кислотный туман и т.д.) was attacked by xy
2. Дальше проверяется скилл в зависимости от вида отаки
3. Дальше подсчитывается урон (цифры с плавающей запятой)
4. Проверяется атакован ли юнит сзади (backstab with power=)
5. Определяет ни дистанционная ли атака была (включает луки, арбалеты, заклы попадающие точно в цель)
6. Подсчитывается снимаемый урон
7. Дальше псевдослучайным способом просчитывается в какую часть тела осуществлён удар.

Теперь техническая часть:
.text:0055401C loc_55401C: ; CODE XREF: sub_553F40+B0 j
.text:0055401C 03C mov ecx, dword_7AF3E8
.text:00554022 03C push offset aSkill ; " skill="
.text:00554027 040 call ??6ostream@@QAEAAV0@PBD@Z ; ostream::operator<<(char const *)
.text:0055402C 03C fld dword ptr [ebx+20h] ; Load Real
.text:0055402F 03C sub esp, 8 ; Integer Subtraction
.text:00554032 044 mov ecx, eax
.text:00554034 044 mov dword ptr [eax+4], 1
.text:0055403B 044 fstp [esp+40h+var_40] ; Store Real and Pop
.text:0055403E 044 call ??6ostream@@QAEAAV0@N@Z ; ostream::operator<<(double)
.text:00554043 03C mov ecx, [ebx+24h]
.text:00554046 03C push offset aDamage ; " damage="
.text:0055404B 040 mov [ebp+arg_0], ecx
.text:0055404E 040 mov ecx, eax
.text:00554050 040 call ??6ostream@@QAEAAV0@PBD@Z ; ostream::operator<<(char const *)
.text:00554055 03C fld [ebp+arg_0] ; Load Real
.text:00554058 03C sub esp, 8 ; Integer Subtraction
.text:0055405B 044 mov ecx, eax
.text:0055405D 044 mov dword ptr [eax+4], 1
.text:00554064 044 fstp [esp+40h+var_40] ; Store Real and Pop
.text:00554067 044 call ??6ostream@@QAEAAV0@N@Z ; ostream::operator<<(double)
.text:0055406C 03C fld dword ptr [ebx+34h] ; Load Real
.text:0055406F 03C fcomp ds:flt_73B84C ; Compare Real and Pop
.text:00554075 03C fnstsw ax ; Store Status Word (no wait)
.text:00554077 03C test ah, 41h ; Logical Compare
.text:0055407A 03C jnz short loc_5540A9 ; Jump if Not Zero (ZF=0)
.text:0055407C 03C mov edx, [ebx+34h]
.text:0055407F 03C mov ecx, dword_7AF3E8
.text:00554085 03C push offset aBackstabWithPo ; " backstab with power="
.text:0055408A 040 mov [ebp+arg_0], edx
.text:0055408D 040 call ??6ostream@@QAEAAV0@PBD@Z ; ostream::operator<<(char const *)
.text:00554092 03C fld [ebp+arg_0] ; Load Real
.text:00554095 03C sub esp, 8 ; Integer Subtraction
.text:00554098 044 mov ecx, eax
.text:0055409A 044 mov dword ptr [eax+4], 1
.text:005540A1 044 fstp [esp+40h+var_40] ; Store Real and Pop
.text:005540A4 044 call ??6ostream@@QAEAAV0@N@Z ; ostream::operator<<(double)
.text:005540A9
.text:005540A9 loc_5540A9: ; CODE XREF: sub_553F40+13A j
.text:005540A9 03C mov al, [ebx+38h]
.text:005540AC 03C test al, al ; Logical Compare
.text:005540AE 03C jz short loc_5540C0 ; Jump if Zero (ZF=1)
.text:005540B0 03C mov ecx, dword_7AF3E8
.text:005540B6 03C push offset aCalledShot ; " called shot"
.text:005540BB 040 call ??6ostream@@QAEAAV0@PBD@Z ; ostream::operator<<(char const *)
.text:005540C0 loc_5540C0: ; CODE XREF: sub_553F40+16E j
.text:005540C0 03C mov ecx, dword_7AF3E8
.text:005540C6 03C push offset aDesthl ; " destHL="
.text:005540CB 040 call ??6ostream@@QAEAAV0@PBD@Z ; ostream::operator<<(char const *)
.text:005540D0 03C mov eax, [ebx+2Ch]
.text:005540D3 03C cmp eax, 6 ; switch 7 cases
.text:005540D6 03C ja short loc_554110 ; default
.text:005540D8 03C jmp ds:off_55438C[eax*4] ; switch jump
.text:005540DF loc_5540DF: ; DATA XREF: .text:0055438C o
.text:005540DF 03C push offset aHead ; case 0x0
.text:005540E4 040 jmp short loc_554115 ; Jump
.text:005540E6 loc_5540E6: ; CODE XREF: sub_553F40+198 j
.text:005540E6 ; DATA XREF: .text:0055438C o
.text:005540E6 03C push offset aBody ; case 0x1
.text:005540EB 040 jmp short loc_554115 ; Jump
.text:005540ED loc_5540ED: ; CODE XREF: sub_553F40+198 j
.text:005540ED ; DATA XREF: .text:0055438C o
.text:005540ED 03C push offset aLhand ; case 0x2
.text:005540F2 040 jmp short loc_554115 ; Jump
.text:005540F4
.text:005540F4 loc_5540F4: ; CODE XREF: sub_553F40+198 j
.text:005540F4 ; DATA XREF: .text:0055438C o
.text:005540F4 03C push offset aRhand ; case 0x3
.text:005540F9 040 jmp short loc_554115 ; Jump
.text:005540FB
.text:005540FB loc_5540FB: ; CODE XREF: sub_553F40+198 j
.text:005540FB ; DATA XREF: .text:0055438C o
.text:005540FB 03C push offset aLleg ; case 0x4
.text:00554100 040 jmp short loc_554115 ; Jump
.text:00554102
.text:00554102 loc_554102: ; CODE XREF: sub_553F40+198 j
.text:00554102 ; DATA XREF: .text:0055438C o
.text:00554102 03C push offset aRleg ; case 0x5
.text:00554107 040 jmp short loc_554115 ; Jump
.text:00554109
.text:00554109 loc_554109: ; CODE XREF: sub_553F40+198 j
.text:00554109 ; DATA XREF: .text:0055438C o
.text:00554109 03C push offset off_78FE08 ; case 0x6
.text:0055410E 040 jmp short loc_554115 ; Jump
.text:00554110
.text:00554110 loc_554110: ; CODE XREF: sub_553F40+196 j
.text:00554110 03C push offset aXz ; default

Кто знает ассемблер разберётся остальным объясню что используется опять таки структура называемая switch и после вычисления регистра eax осуществляется снятие урона с определённой части тела в зависимости от перехода и типа юнита так например баньше никогда не попасть в руку так как у неё только тело и голова. Ну на этом пока всё что я за 10минут вчера накопал если что непонятно спрашивайте. Вопросы преветствуются и критика но только по делу!!!!!!!!!!
ЕLF - 22 июля 2004, 08:00
Довольно интересная информация. Смещения aHead, aBody, aLhand, aRhand, aLleg, aRleg фиксированы относительно друг друга?, т.е. разница в смещении между ними одинакова? Если да, то какая?

А по адресу loc_554115, как я понял будет само отбавление жизни?

:roll:
PZIGOR - 22 июля 2004, 09:12
Цитата (ЕLF):
Довольно интересная информация. Смещения aHead, aBody, aLhand, aRhand, aLleg, aRleg фиксированы относительно друг друга?, т.е. разница в смещении между ними одинакова? Если да, то какая?

А по адресу loc_554115, как я понял будет само отбавление жизни?

:roll:

В зависимости от регистра EAX осуществляется переход по адресам
005540E6 (Body), 005540ED (Lhand), 005540F4 (Rhand), 005540FB (Lleg),
0554102 (Rleg),00554110 (xz)
Вот по этим адресам в зависимости от регистра (где xz атака область от кислотного тумана и т.д ) где равномерно снимается урон со всех частей тела.
Насчёт loc_554115 пока сказать немогу, я же сказал за 10 минут откапал и сильно не вникал но в общем если очень надо могу подробнее посмотреть. Кстати значения параметров можно посмотреть в консоли командой filter там все значения важные выводятся (особенно интересно значение с плавающей точкой). На этом пока всё.!!!!!!
PZIGOR - 23 июля 2004, 06:19
В понедельник будет что то интересное. Кстати прошу не пользоваться информацией в читерских целях.!!!!!!!!!
Бродяга - 23 июля 2004, 22:22
Цитата:
1. Softace (куда без него)

Че за прога такая? :horror:

Цитата:
Написан на языке программирования Visual C++ с использованием библиотеки MFC и седьмой версии DirectX кто не согласен прошу мативировать.


Не согласен. "Мативирую" :
В одном из интервью Ю.Блажевич на вопрос использует ли Нивал MFC и ATL ответил отрицательно.Покажи в движке хоть один вызов MFC функции? :)
PZIGOR - 26 июля 2004, 07:53
2Дурилка картонная
Под движком я понимаю game.exe, starter.exe,3dfpfpu.dll, 2dintmmx.dll
Если не вериш что MFC это просто проверить в свойствах, описания файла starter.exe посмотри. Ещё вопросы есть :)
Насчёт Softice это отладчик системного уровня очень полезная чтука для отслеживания функций по тем или иным событиям.Доков по этому поводу в инете хватает посмотри если не лень.
Тема переехала на закрытый форум!!!!!!!!!
ЕLF - 26 июля 2004, 12:26
Цитата (PZIGOR):
Тема переехала на закрытый форум!!!!!!!!!
Получается, что продолжения уже не прочитать??? :horror:
PZIGOR - 26 июля 2004, 12:31
А что именно интересует? Возможно и будет по усмотрению администрации.!!!!!!
PZIGOR - 27 июля 2004, 13:58
Ага теперь у меня появилось несколько вопросов во первых кто знает какие заклинания не где не используются ни в одном моде из этого списка или если кто то знает другие дополните, возможно я что то пропустил.
magic:
1 Shrink
2 Enlarge
3 Stun
4 Slow
5 Speed
6 Regeneration
7 Weaken
8 Strengthen
9 Lichdom
10 Silence
11 Invisibility
12 Detectlife
13 Infravision
14 Eaglesight
15 Antimagic
16 Fireshield
17 PoisonShield
18 LightShield
19 VisionFog
20 Possession
21 Charm
22 Healing
23 Teleport
24 Link
25 Clairvoyence
26 Firework
27 poison
28 Lightwall
29 Firewall
30 Acidcolumn
31 InvokeLight
32 Fireball
33 Lighting
34 Acidray
35 Firearrow
И вторая просьба может у кого есть texts.res из английской версии игры.
Заранее спасибо тем кто откликнется.!!!!!!!
Dracon - 27 июля 2004, 18:53
http://www.gipat.ru/forum/index.php?&act=Downloads&CODE=03&id=41

Где-то тут должны быть англ. нем. и франц. ресы... Но названия заклов в англ. версии и в ресурсах может и различатся.
PZIGOR - 06 августа 2004, 07:43
Вот небольшой пост по файлам ПЗ (возможно будет интересен начинающим модмейкерам):
Здесь опишу известные мне файлы и по возможности за что они отвечают хотя возможно будут ошибки в описании.
1)Camera (каталог)
содержит файлы с заранее предусмотренными положениями камеры по зонам (bz1g,mainmenu и т.д.)этими камерами игрок управлять не может кроме camera01.cam это свободная камера которая перемещается игроком.
2)Config (каталог)
addrbook.ini (пока точно сказать не могу)
keyboard.ini- пользовательские настройки клавиатуры
lightscavegipat.ini,lightscaveingos.ini,lightscavesuslanger.ini,lightsgipat.ini,lightsingos.ini,lightssuslanger.ini-Параметры освещённости зон в зависимости от внутреннего времени в ПЗ.
movie.ini - порядок проигрывания видеороликов в игре.
tutorial.ini (пока точно сказать не могу)
ai.reg - Стартовые параметры персонажа (здоровье, запас сил,колличество опыта и денег теряемого при смерти в мультиплеере и т.д. )
3)Maps (каталог) - *.mob набор скриптов отвечающий за расположение объектов на карте, выполнение миссий и т.д.
*.mpr - Карты высот используемые для построения ландшафтов
*.grp - (пока точно сказать не могу)
*.mq - список заданий получаемых от различных персонажей в мультиплеере
4)Movies(каталог)
Содержит видеоролики проигрываемые в игре, одноимённый каталог содержится на кампакт диске.
5)Mp(каталог)
*.mp (пока точно сказать не могу)
6)Saves (каталог)
current (каталог если есть) содержит последнее сохранение игры
savea (каталог если есть) запись входа на игровую зону
saveb (каталог если есть) запись выхода на игровую зону
saveq (каталог если есть)быстрое сохранение
*.sav (подробности в следующих выпусках)
7)Stream (каталог)
*.mp3 - фоновая музыка в игре
8)Textures (каталог)
Папка для временного хранения текстур оружия, людей и орков.
9)Res (каталог) Самая интересная папка в игре.
sysmsg.txt - сообщения при ошибках в игре
music.reg - порядок следования фоновой музыки
smessbase.reg - сообщение об ошибке для сетевой игры
streamsn.reg - что то связанное с местами проигрывания фоновой музыки на карте.
aiinfo.res - (содержит 3 запакованных файла normal.dat, tileDesc.reg, units.reg подробности в следующих выпусках)
database.res - (содержит *.adb(порядок выполнения анимации), spells.sdb база данных заклинаний, perks.pdb перки ловкость рук, ближний бой и т.д.,items.idb предметы в игре, prints.db типы местностей,acks.db (подробности в следующих выпусках)
databaselmp.res - (items.idb предметы в сетевой игре, levers.ldb описание звуков для различных сабытий, perks.pdb перки для сетевой игры ловкость рук, ближний бой и т.д., prints.db типы местностей, spells.sdb база данных заклинаний для мульти, units.udb описание юнитов)
figures.res - *.mod модели объектов(контейнер для хранения множества файлов одной модели), *.anm анимация моделей, *.bon скелет модели если есть, *.fig модели объектов, *.lnk (описание модели)
gfx.res - lightning.dat (пока точно сказать не могу)
materials.res - материал в игре
menus.res - *.mmp текстуры таблички меню, menus.reg идентификаторы порядка следования пунктов меню, *.mod модель меню, *.anm анимация меню
outro.res - credits.scr и outro.rtf (подробности в следующих выпусках)
redress.res - *.mmp кожа живых объектов брони и оружия
sfx.res - звуковые эффекты
texts.res - тексты и описания в игре
textslmp.res - тоже но для мульти
textures.res - *.mmp текстуры не живых объектов игры
10)Файлы движка игры
2dintmmx.dll библиотека поддержки инструкций mmx процессора
3dfpfpu.dll библиотека поддержки инструкций сопроцессора
binkw32.dll компонент для проигрывания видеороликов
mss32.dll компонент для проигрывания видеороликов со звуком
mp3dec.asi поддержка *.mp3
game.exe главный файл движка осуществляющий игровой процесс
starter.exe файл стартовых настроек видео и аудио
autorunpro.reg порядок расположения компонентов starter.exe
В следующий раз возможно будет что то интересное.
2Robin
Всётаки скажи что канкретно от меня требуется (желательно подробнее), а то получается что я бездельник и в то же время не могу получить вразумительного ответа, если патч не подходит то скажи как он должен быть, а я уже состряпаю новый.!!!!
P.S. На закрытом форуме так и не смог добиться ответа поэтому пишу здесь (я всёещё хочу помоч но без детальной информации это крайне затруднительно)
Morgot - 06 августа 2004, 16:45
ВОПРОС ВСЕМ:

1. В каких играх используется движок, подобный движку ПЗ???
2. Имеет ли движок ПЗ название?
3. Движок ПЗ уникален или делался по аналогу ранее существовавшего?
Altair - 06 августа 2004, 18:00
Цитата:
addrbook.ini (пока точно сказать не могу)
Адресная книга, как можно узреть в названии. Содержит добавленные игровые сервера (типа список favorites)

Цитата:
*.grp - (пока точно сказать не могу)
Содержит граф проходимости зоны, если я ничего не путаю.

Цитата:
*.mp (пока точно сказать не могу)
Файл мультиплеерного персонажа. Второй вариант - заголовок mpr-зоны, но в этом случае *.mp файл хранится внутри *.mpr, а не в папке Мр.

Цитата:
outro.res - credits.scr и outro.rtf (подробности в следующих выпусках)
первый файл задает параметры просмотра Credits (Об авторах), второй файл содержит сам список людей (его можно открыть вордом или вордпадом).
Morgot - 08 августа 2004, 02:57
Цитата (PZIGOR):
Под движком я понимаю game.exe, starter.exe,3dfpfpu.dll, 2dintmmx.dll


Game.exe - шелл игры. Starter - ну по названию же понятно, что не движок!!!!!! Ну ты в автомобиле Стартёр от движка отличишь?????
Starter лн на то и Starter: ятоб стартовать. Затрузчик это. В пришципе Game.exe тоже можно к движку отнести. 3dfpfpu.dll, 2dintmmx.dll - это движок уж точно

Цитата (PZIGOR):

Если не вериш что MFC это просто проверить в свойствах, описания файла starter.exe!

Подскажи плиз. Я там нашёл только объявление ою MFC, но ни нашёл там даже блихко использование MFC. Просто VС++, на котором писали, точнее компилятор, всегда ыписывает в прогу, что при написании использовалось MFC. Я ни нещёл даже следа использования MFC. скажм адрес процедуры-дуры

2PZIGOR ; предлогаю какой-нить HEXer+Dumper использовать. Лишним он не будет.
На Гамасутре писали, что структурно движок ПЗ похож больше на.... ConflictZone.
PZIGOR - 09 августа 2004, 06:51
2Morgot
Game.exe - шелл игры. Starter - ну по названию же понятно, что не движок!!!!!! Ну ты в автомобиле Стартёр от движка отличишь?????
Starter лн на то и Starter: ятоб стартовать. Затрузчик это. В пришципе Game.exe тоже можно к движку отнести. 3dfpfpu.dll, 2dintmmx.dll - это движок уж точно

Я автомобиль не вожу, а по пооду starterа скажу так не к рисурсам же относить его, а так как он меняет видео моду, фильтрацию и т.д то я как раз к движку его и отношу, а что загрузчик по твоему не может входить в движок. Пожалуйста мотивируй почему он не относится к движку.
Есть вопрос, ана сколько глубоко ты вообще копался в движке чтонибудь уже можеш изменить, например схему генерации опыта или расхода запаса сил, а может что то другое?. А может какуюнибудь статейку по поводу движка тоже напишеш, а то кажется хорошо его изучил.!!!!!!
Morgot - 10 августа 2004, 02:25
ёёёёёё!! перечитай еще раз мои сообщения в той теме!
Цитата:
Я же не просто так спросил насколько изучен механизм "Раздачи Слонов"(прокачки: добавление атаки/защиты). Если эта область мало изучена, то стоит активнее с PZIGOR'ом пораскапывать Game.exe.

Я разве не спрашивал реально ли это вообще??
разве не спрашивал насколько глубоко изучен движок в этом аспекте?
беспречинный наезд.

кстати. Открой Дизасмом Game.exe и перейди к адресу 006F6038.
К чему это они?? злость срывали??

006B41E4, 006B41F4 - что это такое?? к чему перечисление стольких государств??

Если у ж Говорить о Движке то о движке, а не о всём механизме работы. Поэтому я к движку стартер не отнёс
PZIGOR - 10 августа 2004, 07:06
Блин это не наезд а вопрос, как я понял ты тоже сдвижком работаеш может напишеш что нибудь что раскопал интересно ведь.!!!!!!!!
PZIGOR - 12 августа 2004, 06:47
2Morgot
Ну вот как просил несколько функций библиотеки MFC с адресами(если не вериш что MFCовские то посмотри в libах получше)
.text:004234E0 ?CommonConstruct@CWinThread@@QAEXXZ proc near
.text:004234A3 ??0CWinThread@@QAE@XZ proc near
.text:004239E9 ??2CNoTrackObject@@SGPAXI@Z proc near
.text:004235F9 ??0_AFX_THREAD_STATE@@QAE@XZ proc near
Не вдаваясь в подробности, все функции ida pro ищет по сигнатурам так что шанс ошибки крайне нечтожен(на этом принципе основаны и антивирусы), а тем более в нескольких функциях (в данном случае я имею ввиду файл starter.exe осталные файлы движка написаны без MFC)
Morgot - 13 августа 2004, 04:59
Анимэйшен: Вот , вероятно, будет интересно. Анимирование движения:

Для начала прошу посетить адресок 005BEEEB.
Как раз часть анимирования. Тут же видим:


mov edi, ds:OffsetRect ; Move the specified rectangle by
; the specified offsets

push 0Fh ; dy / заносим координаты
push 0 ; dx
lea ecx, [esp+70h+rc]
push ecx ; lprc // ecx в стек

далее
call edi ; OffsetRect - непосредственно смещаем...
.... соответственную часть тела
005BEEFE push offset aSkull ; "skull"
005BEF1C push offset aArms ; "arms" // да обе руки. там для каждой предусмотрена раздельная анимация
push offset aTorso ; "torso"

Заметим, что производится Push -заносим в стек смещение(на сколько нам надо передвинуть руку/ногу) части тела и...
... обращаемси к sub_5BF5D0 - процедуре анимирования.
call sub_5BF5D0

в теле процедуры можно видеть развязочку отвечающую непосредственно за прорисовку (это уже интуитивно можно сказать). Явных ссылок на 3dfpfpu.dll, 2dintmmx.dll нема, поэтому можно предположить, что Для графической части создан отдельный модуль, чтобы не париться - указал процедуру -> прорисовка.
В Game.exe в основном идут Процедуры работы с датабазой: Перки, Объекты... (004D5E9D - ADB, 004E09D1 - perks, 004F77C1 - Units, 006F3B38 - mob). Даже если в CallChart заглянуть - можно увидеть одну ветку (причём доаольно линейную), где идут либо консольные проработки либо работа с базой, перками, итемами и т.п.

Вот ещё

loc_46A6C7 отвечает за прорисовку таких вещей как
FireArrowSmoke, RikArrowSmoke, FireSmoke, AcidRay
короче похоже что это проца спелл-граффики.

Вопрос PZIGORу :
в процедуре sub_426560
loc_42662C
loc_426733
sub_426540 что у них за роль??

Весьма вероятно, что используется Собственный модуль для работы с граффикой(Я имею в виду модуль свой, как в Паскале: Unit ... I nterface ... Implementation - модуль, что Ниваловцы сами написали, чтобы облегчить себе жизнь).
PZIGOR - 13 августа 2004, 09:58
Вот по этому адресу 005BEEE9 у меня lea edx, [ebx+4] так что поситить не могу в связи с различием в дизасм коде (вот если бы ты использовал ida pro то код бы совпал).

Насчёт анимации да предусмотренна для каждой части тела и не только при разборе *.adb файлов я немного там капнул но сильно не вникал потаму как интересовало совсем другое.
Как нет ссылочек на 3DfpFPU.dll и 2DintMMX.dll как раз есть
.text:004F0C6D push offset a3dfpfpu_dll ; "3DfpFPU.dll"
.text:004F0C72 mov eax, ecx
.text:004F0C74 mov esi, edi
.text:004F0C76 mov edi, edx
.text:004F0C78 lea edx, [ebp+var_24]
.text:004F0C7B shr ecx, 2
.text:004F0C7E rep movsd
.text:004F0C80 mov ecx, eax
.text:004F0C82 and ecx, 3
.text:004F0C85 rep movsb
.text:004F0C87 lea ecx, [ebp+var_34]
.text:004F0C8A call sub_427D60
.text:004F0C8F mov eax, [eax]
.text:004F0C91 push eax ; lpLibFileName
.text:004F0C92 call ds:LoadLibraryA
______________________________________________
.text:004EDE70 push offset a2dintmmx_dll ; lpLibFileName
.text:004EDE75 call ds:LoadLibraryA
______________________________________________
.text:00500626 push offset a2dintmmx_dll ; "2DintMMX.dll"
.text:0050062B add ecx, 20h
.text:0050062E lea edx, [ebp+arg_4]
.text:00500631 push ecx
.text:00500632 push edx
.text:00500633 call sub_700C05
.text:00500638 mov eax, [eax]
.text:0050063A push eax ; lpLibFileName
.text:0050063B call ds:LoadLibraryA ; Indirect Call Near Procedure
После этого библиотеки находятся в памяти текущего процесса.

Заклы тоже затрагивал и смотрел названия и эффекты и т.д. но пока интересует совсем другое так что эту тему отлаживаю на потом.
На счёт этих процедур сказать тоже ничего не могу в связи с расхождением кода
в процедуре sub_426560
loc_42662C
loc_426733
sub_426540 что у них за роль??

Насчёт модуля пока тоже сказать нимогу (возможно они используют какието свои), есть некоторые libы каторые пока Ide неизвестны (нет соответствующих сигнатур).
Ну я думаю ответил на некоторые вопросы.!!!
PZIGOR - 23 августа 2004, 08:34
2Morgot
Насчёт перечисления стран дак это для определения кадировки юникод и определение страны по умолчанию (хотя убей бох не знаю зачем, хотели наверно экспортировать во многие страны).
Помнится ты интересовался анимацией так вот (как я понял ты терзаеш версию файла 1.0).
Вот если интересно насчёт анимации посмотри такие строки в ресурсах и поднимись выше там кое что интересное можеш увидеть, к сожалению адреса функций указать не могу так как терзаю версию 1.6
Error during split animation:
node %s have no morphing key frame %d
Error during split animation:
node %s have no position key frame %d
Error during split animation:
node %s have no rotation key frame %d
Если знаеш 3Dmax то заметиш кое что интересное.
Кстати то что ты до этого описывал что то связанное с броней функцию в версии 1.6 я нашёл но пока разобраться некогда то день города то свадьба брата намечается хот если ещё что то найдёш можно обсудить будет сдесь, насчёт библиотеки я посмотрел всётаки сомневаюсь по моему всё средствами DirectX реализованно.
2All
Может кто знает для чего используются файлы с расширениями .ast и .ani просто в движке они прописаны и хотелось бы знать для чего (я таких файлов в ресурсах игры не видел даже на всём жёстком диске не одного не нащёл) кто знает плиз раскажите.!!!!!!
Снайпер - 23 августа 2004, 08:40
*.ani если не ошибаюсь aniмированные курсоры
PZIGOR - 23 августа 2004, 12:57
А где они в игре используются что то в ресурсах таких файлов нет (насколько я знаю), ну всё равно спасибо за ответ!!!!!
Robin - 25 августа 2004, 11:55
PZIGOR
*.ani, тоже самое, что и *.anm.

SnAIper
Курсоры в ПЗ спрайтовые, им для анимации текстуры достаточно.
PZIGOR - 19 января 2005, 12:25
DirectX ктонибудь на уровне ассемблера знает? Помогите плиз!!!!!
Бродяга - 19 января 2005, 12:39
http://www.wasm.ru
Там есть примеры работы с директом на асме.
А вообще с DirectX через ассемблер никто не работает.
PZIGOR - 19 января 2005, 14:26
Примеров у меня у самого много, но ведь в них надо сидеть и ооочень долго разбираться:)!!!!!
Снайпер - 19 января 2005, 15:35
А что, разве можно вот так самому по примерам изучить ассемблер??? :eek: :eek: :eek:
PZIGOR - 19 января 2005, 15:48
Не ассемблер а DirectX на ассемблере!!!!!
Снайпер - 19 января 2005, 16:08
А ассемблер по самоучителю - возможно?
Morgot - 19 января 2005, 18:51
здесь не каждый на высокоуровневый языках хорошо пишет для Диреката, а ты про асм спрашиваешь. В ряд ли ты ТУТ найдёшь.
Если я не ошибяюсЬ, то на форумах NTFS.RU бывал чел, который в этом шарил. Ник, кажисьЮ leonid. Спроси там ;)
Снайпер - 19 января 2005, 19:13
Если я не ошибаюсь, знавал я одного Леонида - любителя ассемблера. Но вряд ли это он...
Sagrer - 20 января 2005, 07:26
Цитата:
А ассемблер по самоучителю - возможно?


имхо возможно.... там есть туториул на wasm-е "Низкоуровневое программирование для DZенствующих"... думаю с него надо начинать. Хотя конечно наличие чела который поможет научиться наверное не помешает.

З.Ы. если кому надо - у меня есть старая версия того туториала - еще с сайта hitech.by.ru. Там оно не в том виде как сейчас лежит на wasm-е, а в виде как оно изначально "издавалось" - архив мыльной рассылки. С одной стороны - встречаются опечатки в кодах на асме, что немного мешает обучению, с другой - юмора побольше, что подбавляет энтузазизьму :).
Бродяга - 20 января 2005, 10:10
Не скажу что я знаю ассемблер.Пару программ на нем написал, и относительно недавно занимался декомпиляцией простой проги с помощью IDA и WinDasm.
С основами знакомился по книге Тома Свана "Освоение Turbo assembler".Можно назвать ее и самоучителем.
Имхо любую вещь в программировании можно освоить самостоятельно.Нужна лишь достойная задача от которой невозможно отказаться ;)
PZIGOR - 20 января 2005, 10:39
Чтобы проще изучить асм на более серьёзном уровне, можно если знаеш C++ зделать прогу и на вкладке projest - settings - C/C++ - Category - Listing Files - Listing File type выбрать Assembly with Source code и потом в папке Release или Debug посмотреть как транслируется код в инструкции ассемблера в файлах с расширением *.cod вот и многое станет понятно. Да кстати если IDA брать и юзать то рекомендую 4.7 там и отладчик более мощный чем в предыдущих версиях, а вместо WinDasm лучше Ollydebuger использовать.
P.S. Описывается Microsoft Visual C++ версия 6
PZIGOR - 24 января 2005, 15:03
Есть предложение разработать свою игру, типа ПЗ. Требуются художники, композитор, сценаристы. Кстати не обещаю что довиду дело до конца, но в данный момент уже около 2х месяцев изучаю движки и т.д. и даже готова дема ландшафта. Так что если кому интересно пишите в приват рассмотрю кандидатуры и если договоримся то возможно получится что то стоющее.
С глупыми вопросами просьба не обращаться, они будут удаляться.
PZIGOR - 25 января 2005, 09:01
Вот по этой ссылке можете дему скачать. Для работы требуется видеокарта класса Gforce.
http://www.gipat.ru/forum/index.php?showtopic=2339&pid=33038&st=0&#entry33038
К сожалнию прямая скачка файла запрещена так что придётся зайти по этому адресу и скачать.
PZIGOR - 07 февраля 2005, 09:51
Тестирование проводилось на компьютере Athlon2000+, мать asus A7V600-X, память Samsung 256Мб 333Мгц, видеокарта Gforce4MX420 64Мб SDR память(на DDR памяти прирост производительности будет ещё ощутимие).
Подопытный кролик: игра проклятые земли.
Стартовые настройки:
Разрешение 1024x768 32бита
Полноэкранный режим
Мип-маппинг
Псевдотонирование
Полноэкранное видео
быстрый курсор
Фильтрация трилейная
Скорость переосвещения частая
Детализация ландшафта высокая
Качество текстур высокое
Все аудионастройки в реестре выставленны в ноль
Тестовая зона zone3obr посёлок орков у рычага.
Использовались настройки камеры по клавишам F9,F10,F11,F12,
FPS только максимальный.
1)
F9 = 37,9 FPS
F10 = 34,5 FPS
F11 = 39,4 FPS
F12 = 37,9 FPS
2)изменил колличество цветов на 1024x768 16бит
F9 = 45 FPS
F10 = 56,7 FPS
F11 = 66,5 FPS
F12 = 64 FPS
3)изменил в реестре VIDEOZBUFFERDEPTHINBITS на 18 разрядность Z буфера Gforce разрешение 1024x768 16бит
F9 = 45 FPS
F10 = 59 FPS
F11 = 69 FPS
F12 = 64 FPS
4)VIDEOZBUFFERDEPTHINBITS 18 разрешение 1024x768 16бит заменил значения ключей реестра Lod1 и Lod2 поигрался
F9 = 49 FPS
F10 = 61,6 FPS
F11 = 73,9 FPS
F12 = 71 FPS
5)А ещё можно поиграться с дальностью видимости камеры и кое какими другими ключами что ещё поднимет FPS на 2 - 10
6)Текстуры разговор особый.
Кстати с текстурами можно поиграться изменяя формат и сделать некоторые трюки с прозрачностью и т.д.
Вот и выходит что из ПЗ можно выжать 100 FPS и даже больше на более мощных машинах, хотя это актуальнее для более слабых.
Ну это так мои старые наработки так что если кому интересно могу и про текстуры подробнее написать, только не знаю когда, кто всё это знает прошу ногами не пинать за такие советы :) !!!!!
PZIGOR - 13 февраля 2006, 09:25
Появился вот какой вопрос к разработчикам аддона. В Проклятые Земли: Затерянные в Астрале у вас новый exeшник с поддержкой simd команд процессора, откуда же вы его взяли? или Nival вам помог?
MerkuriY - 16 февраля 2006, 16:07
а че ты сюда то спрашиваешь :)
PZIGOR - 17 февраля 2006, 08:21
Я не сюда спрашиваю, я везде спрашиваю :)
Часовой пояс: GMT +4:00
Форумы Поселка созданы на базе phpBB2 2.0.4 © phpBB Group