Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компилятор ИИ
GAMEINATOR forums > S.T.A.L.K.E.R. > S.T.A.L.K.E.R. Архив > S.T.A.L.K.E.R. Архив по модификациям
Страницы: 1, 2, 3, 4
Neo][
Пришла тут в голову одна идея.
У нас есть почти рабочий компилятор ИИ из билда 2215.
По словам Zeed-a поменялись форматы, в связи с этим у меня возникла идея переписать уже существующий компилятор на нынешние форматы, хватит ждать у моря погоды и терпеть неуважение руководства ПЫС к комьюнити, надо брать ситуацию в свои руки.

Zeed постучи в аську, обсудим.

Присоединяйтесь все, кто считает, что может чем то помочь, например: разбором новых форматов, особенно приветствуются бывшие и нынешние крэкеры и просто программисты, пишите в личку, обсудим. smile.gif
[empr]
Программист, сделаю нормальный интерфейс.

Was added in 15 seconds:

В icq договоримся...
dev1ce
Empro
Тут нужны знания ассемблера и реверс-инженеринга. Сдался им твой васик -)
Mechanic
Ну...инфы маловато.
IDA в руки и гоу изучать.

з.ы Чего тут программировать-то? Разьве что DLL с WriteProccessMemory. biggrin.gif
Neo][
Цитата
Empro
Тут нужны знания ассемблера и реверс-инженеринга. Сдался им твой васик -)

dev, в точку.
Цитата
Программист, сделаю нормальный интерфейс.
Was added in 15 seconds:
В icq договоримся...

Empro, по крайней мере пока, мы не собираемся писать компилятор полностью с нуля.
[empr]
dev, перестань меня смешить... На том же vb были написаны многия выдающиеся проекты.

Neo][, а собираетесь дизассемблировать существующий? dry.gif ph34r.gif
Mechanic
Цитата
а собираетесь дизассемблировать существующий?

А есть другие предложения? rofl.gif rofl.gif
NOsoft
Идея Оч хороша, особенно на фоне отношения разрабов (((
Главное чтоб у Вас руки неопустились !!!

Заметьте СДК вышел чуть раньше, чем закончилась работа над редактором карт (Batya)

мож и с компилером ИИ также будет
dev1ce
Мое мнение таково "Для определенных целей - определенные средства решения" Поэтому небудем флеймить по языкам. Мои знания IDA и MASM'а назвать удовлетворительными - сложно, поэтому практически помочь несмогу. Поэтому нужны программисты, пищущие на низкоуровневых языках. kasper, отзовись. При отсутствия пионерского задора у товарища, можно будет одарить символической денюжкой. Хотя, у профессионала много времени это не должно отнять...
kasper
Можно попробовать smile1.gif
centrino
Полностью дизассемблировать компилятор? dry.gif

]]>http://www.microsoft.com/whdc/DevTools/default.mspx]]>
Mechanic
Мона и так, другой выход есть? Думаю нет.
Хорошо если компилятор ничем не ужат, без протекторов, врапперов и прочих морферов.
Жаль что PDB файла к нему нет, иначе-бы в IDA было просто разобрать.
centrino
Думаю не ужат и не защищен. Проверить можно: ]]>http://wasm.ru/baixado.php?mode=tool&id=67]]>
centrino
Можно попробовать дизассемблировать это:

#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char _anykey;
cout << endl << "Press any key to continue...";
_anykey = getch();
return 0;
}
... а потом скомпилировать и посмотреть, что получится.
Neo][
Цитата
Можно попробовать smile1.gif

kasper, проверь личку.
Mechanic
Гы...я когда правил проги некоторые, то не компилил, а сразу.
Грузил в ollydbg и писал голыми руками код rofl.gif
И о чудо, работает... ))
centrino
Ну, в общем я это и имел в виду. Ollydbg или Microsoft DDK - не принципиально. Можно SoftICE.

Последний, правда лишился поддержки и перспектив не имеет, а жаль.
centrino
Ладно! Хватит загадочность напускать. Колитесь, SP SDK уже на подходе? smile.gif
dev1ce
Прочитай и тему и потри флуд...
Neo][
Цитата
Грузил в ollydbg и писал голыми руками код rofl.gif
И о чудо, работает... ))

Mechanic, хм, интересно... У меня получалось только раз и то неправильно потом работало.
Цитата
Ну, в общем я это и имел в виду. Ollydbg или Microsoft DDK - не принципиально. Можно SoftICE.

Centrino, зачем же нам этот монстр? Оля тут рулит однозначно smile.gif

Цитата
Ладно! Хватит загадочность напускать. Колитесь, SP SDK уже на подходе? smile.gif

Centrino, если бы мы знали что-то об этом, то не мучались бы с разбором старого компилятора. По поводу СДК, можешь почитать мой пост в соседней теме(Чистое небо).
Mechanic
Цитата
хм, интересно... У меня получалось только раз и то неправильно потом работало.

Через что я только не прошел.
Это действительно "охрененно" трудная работка.
Как вспомню - 2 дня бился почему там где мне надо получаеться -2^32.
Как оказалось EAX перезаписывался туеву кучу раз.

Имхо мое мнение - врядли кто из нас осилит реверсинг компилятора.
На крайняк если хорошо с С++ кто-то дружит - можно попробовать фокус с хуками (VirtualProtect итд).
Это тож не просто, но проще чем "чатица с процессором" и выяснять отношения с регистрами rofl.gif
centrino
Neo][, какие исходные файлы обрабатывает компилятор, формат какого файла поменялся исходного или конечного?

Чуть не забыл про параметры командной строки. smile.gif
Zeed
Для начала давайте разберемся, что мы должны получить в итоге wink.gif .

Чтобы все было в одном месте, повторю сам процесс использования компилятора xrai.exe.
Ключи в порядке использования.

xrai.exe -draft -f <level> - черновое компилирование сетки ai
[b]xrai.exe -g <level> - компилируем off-line ai, graph и cross table
xrai.exe -m - получаем game.graph (микс из level.graph и level.gct)
xrai.exe -s - объединение level.spawn, level.ai, level.game в all.spawn

Для успешной компиляции, сам компилятор должен быть интегрирован с игрой (или должны быть папки с конфигами и скриптами - gamedata\config и gamedata\script).
Сам компилятор xrai.exe от беты 2215, качаем ]]>отсюда]]> или ]]>отсюда]]>(если у кого то его нет). После чего распаковываем в папку с игрой, соглашаясь на замены.
При компиляции загружаются следующие скрипты:
gamedata\scripts...
class_registrator.script
script _G.script
smart_terrain.script
se_respawn.script
se_switcher.script
se_stalker.script
se_car.script
se_zones.script

se_item.script- с оригинальным почему то работать не хочет. Но начинает, если удалить несколько значений из него - надо разбираться.
se_artefact.script
se_monster.script
game_registrator.script


Новый уровень обязательно надо добавить в следующие файлы, чтобы компилятор (и игра потом) их видели:
gamedata\config...
game_levels.ltx - секция [levels] и [levelXX], по образу и подобию существующих smile.gif.
game_graphs.ltx
game_maps_single.ltx

Теперь, вкратце, о самом использовании xrAI.exe
Создадим, для примера, два уровня, чтобы точки перехода были друг на друга.
Возьмем, например, уровени из sdk (или создадим свои, кому как проще wink.gif ).
Добавим их в выше указанные файлы (game_levels.ltx, game_graphs.ltx, game_maps_single.ltx)
Удалим все объекты секции spawn.

Добавим graph_point - точку, где будет появляться актер, при переходе на этот уровень с другого, где указываем текущий уровень и название точки, на которую будет ссылаться level_changer с другого уровня.
Добавим level_changer - где указываем, на какой уровень должен осуществляться переход и название точки, где он появляется.
Сгенерируем сетку проходимости AI.
Скомпилируем уровни из редактора.
Скомпилируем уровень, используя xrLC и xrDO_light.

Теперь очередь xrAI:
По идее, мы должны были добавить еще и актера на первый уровень. Но тут, при компиляции с ключом -g, выдается ошибка. Видно чего то не хватает в конфигах - надо разбираться.
xrai.exe -draft -f <level>
xrai.exe -g <level>

тоже самое и для второго уровня.

После чего:
xrai.exe -m - получаем game.graph

с ключом -s выдается ошибка - тоже надо разбираться.

Теперь о том, что получаем в итоге:
level.ai - формат не изменился, по сравнению с 2215.
level.graph - изменился заголовок, сам формат, на первый взгляд, не поменялся.
level.gct.raw - 100% дубликат level.gct
level.gct - надо разбираться, формат вроде тот же, но при компиляции выдает, что версии не совместимы.
game.graph - на первый взгляд поменялся только тип данных (с integer на int16), но тут надо смотреть подробнее.

Есть еще кое что:
не хватает многих классов в xrai от 2215, поэтому при компиляции с ключом -s, он ругается на их отсутствие.
Компилятор с ключом -m использует level.gct.raw, переименовывая его потом в level.gct


Ну а дальше - дополняем, поправляем, разбираемся дальше smile.gif .

P.S. Думаю, проще будет сделать конвертер, но надо подробно разбирать game.graph.
Zeed
Для начала давайте разберемся, что мы должны получить в итоге wink.gif .

Чтобы все было в одном месте, повторю сам процесс использования компилятора xrai.exe.
Ключи в порядке использования.

xrai.exe -draft -f <level> - черновое компилирование сетки ai
[b]xrai.exe -g <level> - компилируем off-line ai, graph и cross table
xrai.exe -m - получаем game.graph (микс из level.graph и level.gct)
xrai.exe -s - объединение level.spawn, level.ai, level.game в all.spawn

Для успешной компиляции, сам компилятор должен быть интегрирован с игрой (или должны быть папки с конфигами и скриптами - gamedata\config и gamedata\script).
Сам компилятор xrai.exe от беты 2215, качаем ]]>отсюда]]> или ]]>отсюда]]>(если у кого то его нет). После чего распаковываем в папку с игрой, соглашаясь на замены.
При компиляции загружаются следующие скрипты:
gamedata\scripts...
class_registrator.script
script _G.script
smart_terrain.script
se_respawn.script
se_switcher.script
se_stalker.script
se_car.script
se_zones.script

se_item.script- с оригинальным почему то работать не хочет. Но начинает, если удалить несколько значений из него - надо разбираться.
se_artefact.script
se_monster.script
game_registrator.script


Новый уровень обязательно надо добавить в следующие файлы, чтобы компилятор (и игра потом) их видели:
gamedata\config...
game_levels.ltx - секция [levels] и [levelXX], по образу и подобию существующих smile.gif.
game_graphs.ltx
game_maps_single.ltx

Теперь, вкратце, о самом использовании xrAI.exe
Создадим, для примера, два уровня, чтобы точки перехода были друг на друга.
Возьмем, например, уровени из sdk (или создадим свои, кому как проще wink.gif ).
Добавим их в выше указанные файлы (game_levels.ltx, game_graphs.ltx, game_maps_single.ltx)
Удалим все объекты секции spawn.

Добавим graph_point - точку, где будет появляться актер, при переходе на этот уровень с другого, где указываем текущий уровень и название точки, на которую будет ссылаться level_changer с другого уровня.
Добавим level_changer - где указываем, на какой уровень должен осуществляться переход и название точки, где он появляется.
Сгенерируем сетку проходимости AI.
Скомпилируем уровни из редактора.
Скомпилируем уровень, используя xrLC и xrDO_light.

Теперь очередь xrAI:
По идее, мы должны были добавить еще и актера на первый уровень. Но тут, при компиляции с ключом -g, выдается ошибка. Видно чего то не хватает в конфигах - надо разбираться.
xrai.exe -draft -f <level>
xrai.exe -g <level>

тоже самое и для второго уровня.

После чего:
xrai.exe -m - получаем game.graph

с ключом -s выдается ошибка - тоже надо разбираться.

Теперь о том, что получаем в итоге:
level.ai - формат не изменился, по сравнению с 2215.
level.graph - изменился заголовок, сам формат, на первый взгляд, не поменялся.
level.gct.raw - 100% дубликат level.gct
level.gct - надо разбираться, формат вроде тот же, но при компиляции выдает, что версии не совместимы.
game.graph - на первый взгляд поменялся только тип данных (с integer на int16), но тут надо смотреть подробнее.

Есть еще кое что:
не хватает многих классов в xrai от 2215, поэтому при компиляции с ключом -s, он ругается на их отсутствие.
Компилятор с ключом -m использует level.gct.raw, переименовывая его потом в level.gct


Ну а дальше - дополняем, поправляем, разбираемся... smile.gif .

P.S. Думаю, проще будет сделать конвертер, но надо подробно разбирать game.graph.
Avel
Но ведь если мы удалим все из секции spawn, то не сможем первый раз откомпилировать (build) ,будет ругаться что нужен rpoint blink.gif
Neo][
Zeed, а почему не компилируешь сетку ИИ в финальном варианте, т.е. так.
xrai.exe -draft -f <level> - черновое компилирование сетки ai
******** -verify <level> - проверим на правильность
******** -f <level> - финальное компилирование
xrai.exe -g <level> - компилируем off-line ai, graph и cross table
xrai.exe -m - получаем game.graph (микс из level.graph и level.gct)
xrai.exe -s - объединение level.spawn, level.ai, level.game в all.spawn
Цитата
с ключом -s выдается ошибка - тоже надо разбираться.

Zeed, а что за ошибка? Пока нет возможности самому посмотреть. Возможно связано с тем, что точка спавна актёра обязательна?
Zeed
Neo][,
Забыл об этом упомянуть smile.gif .

Верификация проходит успешно, причем проверяя уровни из финальной версии!!! тоже все читает и выдает положительный результат smile.gif , но при окончательном компилировании (-f) ошибка не выдается - просто висит на загрузке уровня.

Цитата
а что за ошибка?

* New phase started: Loading AI map
! Sector graph doesn't correspond to the level graph : rebuilding...
* Navigation info : 117662 nodes, 108 sectors, 402 edges
117662 nodes loaded

* New phase started: Loading graph points
| Vertices read : 0
| Vertices read : 0
| Vertices read : 0
| Vertices read : 0
| Vertices read : 0
***STOP*** file '(null)', line 0.
***Reason***: *** Internal Error ***
Без актера все нормально. Скорее всего его надо как то по особенному ставить - не хватает конфига или нет нужной секции, хотя в 2215 и финале они идентичны.
Вообщем - надо разбираться.
Zeed
Neo][,
Забыл об этом упомянуть smile.gif .

Верификация проходит успешно, причем проверяя уровни из финальной версии!!! тоже все читает и выдает положительный результат smile.gif , но при окончательном компилировании (-f) ошибка не выдается - просто висит на загрузке уровня.

Цитата
а что за ошибка?

При компиляции с ключом -g <level> - с актером.

* New phase started: Loading AI map
! Sector graph doesn't correspond to the level graph : rebuilding...
* Navigation info : 117662 nodes, 108 sectors, 402 edges
117662 nodes loaded

* New phase started: Loading graph points
| Vertices read : 0
| Vertices read : 0
| Vertices read : 0
| Vertices read : 0
| Vertices read : 0
***STOP*** file '(null)', line 0.
***Reason***: *** Internal Error ***
Без актера все нормально. Скорее всего его надо как то по особенному ставить - не хватает конфига или нет нужной секции, хотя в 2215 и финале они идентичны.

С ключом -s

***STOP*** file 'P:\xrAI\level_spawn_constructor.cpp', line 238.
***Reason***: *** Assertion failed ***
Expression: xr_strlen(*(*I).first)

***STOP*** file '(null)', line 0.
***Reason***: *** Internal Error ***

Вообщем - надо разбираться.
Woland
Смотрю, тема ушла на вторую страницу. Так с xrAI и не разобрались? huh.gif
[empr]
Не пробовали заспаунить ботов в МП, получив level.ai?..
GOLOD55
Цитата
xrai.exe -m - получаем game.graph (микс из level.graph и level.gct)

похоже что тут level.gct ни при чем. в game.graph компилируются только соотв-нные level.graph от каждой зоны(список зон - в начале game.graph)
jamakasi
Получилось ли запустить карту с скомпиленым ии?если да то можете собрать рабочий компилер.ЗЫ пусть ии даже тупит бьётся головой о стены,главно что-бы карта запустилась.
[empr]
jamakasi, не получится, а как же game.graph и all.spawn?
jamakasi
Возможно интеграция содержимого в аллспавн ненужна,в некоторых мапах есть спавн файл ,вот только так неполучится уровень присобачить к другим картам но мне это пока ненадо.
macron
Народ, сейчас пытаюсь добавить сингл в 2215, добавляя недостающие ресурсы из финалки. Сейчас конкретно уперся в all.spawn - из финалки подставить не удается. С помощью xrai.exe создать новый пока не получается - то ошибки в конфигах, то еще чего. Поэтому вопрос - у кого-нибудь реально получалось компилить all.spawn в 2215 или в финалке с помощью xrai.exe, или затея совсем дохлая?
(команда xrai.exe -s)
jamakasi
macron
Надо долбить зеда и емпыча(у него вроде спсдк или он реанимировал храи из 2215).
НАРОД давайте объединимся и добьём аллспавн и геймграф.
ЗЫ на портале я димана90.

Добавлено через 1 минуту 28 секунд:

EmpR /Эмпрыч/
аим сори за очапатку
[empr]
Меня долбить не надо.

Ждите в ближайшее время видеоматериал по новым локациям в сингл-режиме.
(от 2215 не прокатит 100%, не мучайтесь smile.gif, сам давненько пытался)
Sergey81
EmpR_/Эмпрыч/,
Цитата
Ждите в ближайшее время

В ближайшее время это когда? Завтра? Через год? smile.gif
[empr]
Не могу ничего пока обещать. Раз уж так торопите, пара фактов:
- сингл СДК для "Тени Чернобыля" выпущен не будет.
- без него добавлять новые локации в сингл невозможно (не имея собственного инструментария).
- сборка компилятором от билда 2215 невозможна.
Sergey81
EmpR_/Эмпрыч/,
Цитата
- сингл СДК для "Тени Чернобыля" выпущен не будет.

эээ, пысы ведь обещали... ohmy.gif
Цитата
- без него добавлять новые локации в сингл невозможно (не имея собственного инструментария).

А у тебя есть собственный инструментарий? Вобще добавлять локации можно будет когда-нибудь? sad.gif
macron
EmpR_/Эмпрыч/, раз уж даже у тебя не вышло с 2215 - расскажи хотя бы до чего дошел, на чем дело застопорилось. Поделись, так сказать, опытом. Я добился следующих результатов:
-возможность запуска любых мультиплеерных или сингловых в режиме эмуляции мультиплеера уровней из финалки
-полный фикс всех графических багов с уровнями из финалки (в dx8 разумеется)
-подстановка game.graph с измененным заголовком из финалки (все mp нормально грузит)
-примерное понимание связи all.spawn и game.graph - в аллспавне одной строчкой прописано 16 байт из game.graph
-специальный батник для запуска сингла в обход меню(проверен на финалке)
-возможность (пока не проверено) загрузки скриптов из файла level.ltx, что в каждом уровне

На данный момент при подстановке аллспавна из финалки уперся в ошибку:
* Loading spawn registry...
***STOP*** file 'P:\xr_3da\xrGame\alife_spawn_registry.cpp', line 92.
***Reason***: *** Assertion failed ***
Expression: header().graph_guid() == ai().game_graph().header().guid()
Spawn doesn't correspond to the graph : REBUILD SPAWN!
***STOP*** file '(null)', line 0.
***Reason***: *** Internal Error ***

Предполагаю, что формат all.spawn изменился и xrgame.dll просто не находит там нужной строчки. Пытался использовать game.graph из 2215 + аллспавн из финалки 1.0000-1.0003 (с измененными 16 байтами для совместимости с game.graph). Также пытался использовать game.graph из финалки с измененным заголовком + нормальный аллспавн из финалки. Ошибка одна и таже. Ты до этого доходил?
[empr]
macron, а тут и предполагать не нужно - ошибка будет именно эта и именно всегда.
Суди сам - за последние два месяца (в период разработки Чистого Неба) формат файлов уровней (в том числе и графы и спаун) менялся несколько раз.
Не кардинально, но менялся.
Теперь представь себе, насколько он изменился за несколько лет.
Проблема даже не в том, что он не такой, он очень похож. Но компилятор не поймёт, что такое "похож". Ему нужен чётко такой спаун, как в 2215.
Предлагаю прекратить попытки играться с xrAI из 2215. Максимум на что он способен - скомпилировать АИ-карту. Как сборщик он не годен и точка.

Добавлено через 1 минуту 50 секунд:

Цитата
эээ, пысы ведь обещали... 

И что?smile.gif
macron
EmpR_/Эмпрыч/, благодарю за разъяснения. Приятно осознавать, что дошел "до упора". С экспериментами над синглом пока завяжу. Ну может еще над добавлением шейдеров r2 из финалки поковыряюсь - хотя особо в них не смыслю.
Лохотрон
не до упора ты дошел)
нео и каспер это дело обошли, а вот дальше траблы, вылетает без объяснений, если чешешь в ассемблере, с++ дерзай... формат поменяли как надо, хз почему непашет
по поводу "завяжу", емпро просто убирает конкурентов))) без обид)
macron
Loxotron,ну спасибо, попробую с ними связаться. Просто интересно, как обошли. Пусть форматом делятся tongue.gif
jamakasi
Цитата
- сингл СДК для "Тени Чернобыля" выпущен не будет.
- без него добавлять новые локации в сингл невозможно (не имея собственного инструментария).

-буду надеяться на лучшее.
-а как-же ты карту лепишь?(ответь в пм если так немогешь или нельзя)
macron
Neo][, Можешь просветить, как вы с Каспером сумели подставить правильный аллспавн в 2215? (Знаю, что дальше будут новые ошибки, хотя бы до них добратьтся бы...) А то мы пока только ворон вручную спавнить научились.
macron
Поправка. Ворон уже спавним через скрипт.
[empr]
macron, если ты о 2215, то скачай патчер от Нео][ и в консоли g_spawn m_crow и всё biggrin.gif.
macron
EmpR_/Эмпрыч/, спасибо. Пропатченный xrgame.dll для разблокировки спавна мы уже юзаем (за изначальную идею спавна именно ворон - спасибо Diablo). Фишка была именно заставить ворон спавнится автоматически через скрипт, без ввода g_spawn m_crow. К тому же теперь можно разом заспавнить хоть 10000 ворон.

Если кому интересно - вот патч для автоматического спавна ворон для десматча в 2215 (1mb)

зеркало _http://www.keepmyfile.com/download/be55101962791
зеркало _http://stream.ifolder.ru/3982210

подробности в gamedata\scripts\spawncrow.script
а сам скрипт грузится через gamedata\config\script.ltx

]]>]]>
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.