» TeamX (Архив Форума)«


Форум TeamX » Исследования » Fallout online (... или что-то в этом духе)

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 ] Все собщения

 
Tehnokrat
Модератор

Откуда: Новосибирск
Регистрация: Окт. 2003

Всего: 489 сообщений

Предлагаю серьёзно обсудить возможность создания online игры на движке Fallout 2. А такая возможность существует (нет, сегодня не 1 апреля и я в здравом уме ).

Сразу предупреждаю, не надо сюда постить на тему "чего бы я хотел видеть в такой игре", прошу предлагать реальные идеи и пути реализации, основанные на вашем знании "внутренностей" Фола и программирования.

Для начала давайте забудем про многопользовательскую online игру и подумаем какие эксперименты можно провести и чего можно получить исходя из следующих начальных условий:
предположим у нас есть чистый Фолл - всё выносим нафиг, оставляем одну пустую карту с парочкой объектов и пару-тройку скриптов для возможности экспериментирования. Имеем два компа на разных концах инета. Отсюда и будем плясать.

Задачу можно разбить на три части:
1. Обеспечение двустороннего взаимодействия между скриптами Фола и какой-нибудь "левой" прогой.
2. Создание простейшего клиент-серверного приложения для обеспечения канала комп<=>комп через инет.
3. Создание скриптов, которые будут использовать вышеупомянутый канал для передачи данных и реагирования на полученные данные.

Пункт 1.
Сначала я хотел из внешней проги найти значение какой-нибудь GVAR, мониторить его и менять при необходимости, но выяснил, что адреса GVAR в адресном пространстве Фола не постоянны и меняются при каждом запуске игры, что не есть хорошо. Тогда я описал export variable. По-моему самое оно. При каждом запуске Фола адрес этой переменной не изменялся, даже когда я редактировал скрипт и добавлял туда другие переменные. Вот вам и канал "скрипт фола"<=>"левая прога". Это можно использовать не только для создания Фола online, но и для создания внешних "заплаток" на Фол.

Если есть идеи получше, как обеспечить взаимодействие "скрипт"<=>"левая прога" - предлагайте.

Ещё я попутно выяснил, что если в переменной не число, а строка, то эта переменная содержит адрес строки (ссылку на строку). К сожалению этот адрес изменяется при присвоении новой текстовой строки этой переменной внутри скрипта, но поскольку сам адрес переменной не меняется, вполне можно обеспечить передачу текстовых данных с одного Фола на другой.

Что из всего этого можно в ближайшей перспективе получить? А вот что.
1. Представьте себе два компа с Фолами соединённые через инет нашей будующей клиент-серверной прогой. За одним из них сидит чел и тыкает мышкой в карту, чузен, соответственно переходит на новую позицию. В скрипте чуза по таймеру вызывается обработчик, который замечает смену позиции и сообщает новую позицию клиент-серверному приложению. Оно, в свою очередь, передаёт эту позицию на второй комп, в скрипт какого-нибудь субъекта и этот субъект послушно переходит на новое место.
2. Можно обеспечить передачу вещей "чузен на 2-м компе"<=>"субъект на 2-м компе" по команде чузена с 1-го компа.

То есть субъект на 2-ом компе является как бы аватаром чузена с 1-го компа.

3. Можно создать что-то типа инетчата на движке Фола (вполне реально на интерфейсных функциях).

Для начала достаточно. Предлагаю подумать, обсудить. Если есть желающие.

-----
Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.

Отправлено: 18:16 - 2 Мая, 2006
Pavel
Модератор

Откуда: Одесса Украина
Регистрация: Май 2004

Всего: 368 сообщений

Tehnokrat
Ты в точку попал, экспорт вариаблы действительно не всегда меняется, но на разных компах он в разных местах. Ray уже работал над этим вопросом, для работы с динамикой на карте мира и не только, собственно весь мой мод от этого зависит. Более того, можно отслеживать и все переменные фала, вопрос только в алгоритме, он довольно долог.

-----
В жизни нельзя быть уверенным на 100%, ведь никогда не знаешь когда...

Отправлено: 20:21 - 2 Мая, 2006
Spy
Реалист

Откуда: Все там будем...
Регистрация: Май 2005

Всего: 374 сообщения

2 Tehnokrat
Правильной дорогой движетесь, товарищь. При случае свяжись с Ray-ем. Он, насколько я помню, тоже писал некую "левую" прогу, которая работала с сегментом оперативки Фола.

-----
Хочешь, чтобы что-то было сделано хорошо - сделай сам.

Отправлено: 20:27 - 2 Мая, 2006
Tehnokrat
Модератор

Откуда: Новосибирск
Регистрация: Окт. 2003

Всего: 489 сообщений

То, что адреса переменных на разных компах разные, меня не слишком беспокоит, так-как найти переменную довольно легко по её имени. Там жёсткая структура  - сначала идёт имя, потом какая-то фигня, видимо тип и ещё чего-то, а в конце значение (или адрес строки). Так что здесь проблем не вижу.

А беспокоят меня две вещи - создание клиент-серверного приложения и боевой режим (в боевом режиме с управлением всё плохо, хотя Raven когда-то занимался эмуляцией боевого режима на стандартных функциях но всё это было сыро).

С Ray'ем я поговорю, если он сам здесь объявится.

-----
Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.

Отправлено: 22:04 - 2 Мая, 2006
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Я здесь. Отвечу ближе к ночи - сейчас нет времени.

P.S. Павел, спасибо за линк. Борду глючит, я пропустил новую тему.

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 20:06 - 3 Мая, 2006
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Итак:

Сразу скажу - скорее всего, на 99%, с боевым режимом сделать ничего не получится. За бой отвечает двиг, большинство скриптов в боевом режиме не работает. Переопределить действия нпс не получится.

Но в принципе и без боя есть интересные задумки, но полноценного fonline не получится. Однако, и без этого есть интересные идеи. О них говорить думаю пока бессмысленно.
Я когда увидел эту тему - у меня появилась идея как нормально сделать то, над чем я работал и что пока не получилось сделать. Таким образом можно сделать динамику, над которой я бился. Не знаю насколько реальна моя новая идея, надо будет подумать, посоветоваться. Но об этом ниже.


Цитата:

Сначала я хотел из внешней проги найти значение какой-нибудь GVAR, мониторить его и менять при необходимости, но выяснил, что адреса GVAR в адресном пространстве Фола не постоянны и меняются при каждом запуске игры, что не есть хорошо.



Я тоже с этого начинал. Однако, адреса GVAR меняются не только при каждом запуске игры, но и при смене локаций и пр. Что не есть хорошо.


Цитата:

Тогда я описал export variable. По-моему самое оно. При каждом запуске Фола адрес этой переменной не изменялся, даже когда я редактировал скрипт и добавлял туда другие переменные.



Лучше, но тоже не есть гуд. Как уже сказали, на разных машинах они в разных местах. Можно, конечно же при установке проги (мода\fonline) искать нужное место в памяти, но у меня это получалось долго и коряво (да и глючно). Если подскажешь нормальный способ поиска адреса в памяти - можно начинать думать. Правда я никогда  клиент-серверное приложение не писал. Но надо же пробовать. Есть идея каким способом заставить реагировать фол на действия игроков на разных компах. Ничего особо сложного не должно быть, а там как получится.  Но это как запасной вариант.

Два других:

Mynah предлагал (насколько я сейчас помню) приблизительно такой вариант: в определённый момент запускается нужная прога, с определённым ключём. В зависимости от ключа - выполняются определённые дествия. Для динамики это хорошо - для fonline не подходит. Я пытался реализовать эту идею, но возник ряд проблем, с которыми я не смог справиться.

Вот какая идея посетила меня вчера: я не знаю, насколько это фантастично, но суть в следующем: как и в предыдущем варианте нужен ассемблер в чистом виде. Идея в том, чтобы заменить одну из фоловских скриптовых функций (которая не используется). Аргументом в функцию передавать строку. Функция бы не делала ничего, кроме записи полученной строки в файл. Запись в файл не так уж и сложно сделать. Проблема в том, как переопредилить (а перед этим найти) нужную функцию (а есть ли такая?) Это пока из области научной фантастики.

Вот и всё, что пока хотелось сказать.

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 19:58 - 4 Мая, 2006
Pavel
Модератор

Откуда: Одесса Украина
Регистрация: Май 2004

Всего: 368 сообщений


Хм, вот какая мысля меня посетила.. А если привязаться к тому, какой ресурс использует фалл? В смысле отслеживать обращение к скрипту, текстовику, фрм?
Хотя на этом мало чего вообще построишь, но для надстройки над двигом самое оно... если сделать... хотя...
На счет замены функции... так, это... взять хотя бы "obj_can_hear_obj", у меня она, как то, криво работала.

А вообще, было бы очень хорошо достичь хоть какого то результата. Ведь и для динамики и для ФОнлайн нужна привязка к переменным, если сделать быстрый отлов местарасположения переменной в памяти, то всем сразу станет легче.

Еще мысля... Есть стандартные функции, к примеру вывод квадрата с цветом и т.д. может есть и стандартная функция вывода переменной в специально отведенное место, а мы об этом не сном не духом... или я сказал бред?

-----
В жизни нельзя быть уверенным на 100%, ведь никогда не знаешь когда...

Отправлено: 20:24 - 4 Мая, 2006
Tehnokrat
Модератор

Откуда: Новосибирск
Регистрация: Окт. 2003

Всего: 489 сообщений

to Ray

Цитата:

Сразу скажу - скорее всего, на 99%, с боевым режимом сделать ничего не получится. За бой отвечает двиг, большинство скриптов в боевом режиме не работает. Переопределить действия нпс не получится.



Не факт, кстати, что не получится. Там есть интересная функция attack_complex с которой далеко не всё ясно. Возможно придётся вырубать боевой режим после каждого действия. А ещё есть такая идея - пусть боты деруться, а чузены типа командуют. Как? А фиг его знает, думать надо.

Цитата:

Но в принципе и без боя есть интересные задумки, но полноценного fonline не получится.



На полноценный я и не надеюсь, хочу вот понять, сколько из всего этого можно выжать по-максимуму.

Цитата:

Цитата:
--------------------------------------------------------------------------------
Тогда я описал export variable. По-моему самое оно. При каждом запуске Фола адрес этой переменной не изменялся, даже когда я редактировал скрипт и добавлял туда другие переменные.
--------------------------------------------------------------------------------

Лучше, но тоже не есть гуд. Как уже сказали, на разных машинах они в разных местах. Можно, конечно же при установке проги (мода\fonline) искать нужное место в памяти, но у меня это получалось долго и коряво (да и глючно). Если подскажешь нормальный способ поиска адреса в памяти - можно начинать думать. Правда я никогда  клиент-серверное приложение не писал. Но надо же пробовать. Есть идея каким способом заставить реагировать фол на действия игроков на разных компах. Ничего особо сложного не должно быть, а там как получится.  Но это как запасной вариант.



Я вот тоже никогда клиент-серверные приложения не писал... а придётся, если до него вообще дело дойдёт. Эти штуки не столь сложно писать, сколь сложно отлаживать, сам понимаешь почему.

Насчёт variable - может расскажешь, как ты их искал, надо же от чего-то отталкиваться. В любом случае, я пока не готов сбрасывать их со счетов, и в ближайшее время изучу этот вопрос подробнее.

Цитата:

Mynah предлагал (насколько я сейчас помню) приблизительно такой вариант: в определённый момент запускается нужная прога, с определённым ключём. В зависимости от ключа - выполняются определённые дествия. Для динамики это хорошо - для fonline не подходит. Я пытался реализовать эту идею, но возник ряд проблем, с которыми я не смог справиться.



Что за проблемы? Давай будем вместе решать.

Цитата:

Вот какая идея посетила меня вчера: я не знаю, насколько это фантастично, но суть в следующем: как и в предыдущем варианте нужен ассемблер в чистом виде. Идея в том, чтобы заменить одну из фоловских скриптовых функций (которая не используется). Аргументом в функцию передавать строку. Функция бы не делала ничего, кроме записи полученной строки в файл. Запись в файл не так уж и сложно сделать. Проблема в том, как переопредилить (а перед этим найти) нужную функцию (а есть ли такая?) Это пока из области научной фантастики.



Не так уж и фантастично, но явно сложнее, чем через переменную. Придётся долго возиться с дебагером. Да и фиг знает какие там функции не используются - даже если они не задействованы в скриптовой системе, это ещё не значит, что куски их кода не задействованы в основной проге. Можно получить кучу нескучных глюков



(Добавление от  21:12 - 4 Мая, 2006.)


to Pavel

Цитата:

Хм, вот какая мысля меня посетила.. А если привязаться к тому, какой ресурс использует фалл? В смысле отслеживать обращение к скрипту, текстовику, фрм?



Обращения к файлам отслеживать можно (например Filemon это делает, значит сможем и мы), вот только не знаю, чего можно этим добиться. Ну узнаем мы, что было обращение к какому-то файлу и чего? Сам факт обращения мало чего даёт, хотелось бы получить передаваемую инфу, а как - не знаю.

Цитата:

А вообще, было бы очень хорошо достичь хоть какого то результата. Ведь и для динамики и для ФОнлайн нужна привязка к переменным, если сделать быстрый отлов местарасположения переменной в памяти, то всем сразу станет легче.



Во всяком случае с п.1 я твёрдо настроен разобраться. С остальными - по возможности.

Цитата:

Еще мысля... Есть стандартные функции, к примеру вывод квадрата с цветом и т.д. может есть и стандартная функция вывода переменной в специально отведенное место, а мы об этом не сном не духом... или я сказал бред?



Эт ты про интерфейсные функции видимо. Что-то вспоминаю следующего характера - изменив какую-то строку в конфигурационном файле толи Маппера, то ли самого Фола можно обеспечить вывод отладочных сообщений, переменных и ещё всякой фигни в спец. файл. Надо будет поразбираться. Так-что твоя мысль не бред, рациональное зерно в ней есть.

-----
Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.

Отправлено: 21:09 - 4 Мая, 2006 | ИСПРАВЛЕНО: Tehnokrat - 23:28 - 9 Мая, 2006
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Цитата:
На счет замены функции... так, это... взять хотя бы "obj_can_hear_obj", у меня она, как то, криво работала.



Зачем же её? Вот лучше кандидат:

Цитата:
int how_much(int val) - возвращает оценку результата "броска кубика"
Аргументы:
val - результат "броска кубика"
Возвращаемое значение:
?
Примечания:
На самом деле аргументы принимать отказывается. Ни в одном скрипте не используется.



Даже с передаваемым аргументом. Но это всё лирика, надо искать.


Цитата:
А ещё есть такая идея - пусть боты деруться, а чузены типа командуют. Как? А фиг его знает, думать надо.



Посмотрим.

Цитата:
Насчёт variable - может расскажешь, как ты их искал, надо же от чего-то отталкиваться. В любом случае, я пока не готов сбрасывать их со счетов, и в ближайшее время изучу этот вопрос подробнее.



Отчего ж не рассказать: старым дедовским способом - перебором Для быстрого поиска вручную - нужна сортировка. Что не приемлимо. Я задавал значение определённой гвары, а потом, с учётом того, что размер переменной 4 байта сравнивал каждый четвёртый (при совподении проверял остаток числа). Поиск занимал от 30 сек до 2 мин. Но это уже от безысходности. Вообще-то есть хороший и быстрый способ поиска значения. Подозреваю, что именно он используется в ArtMoney. Там отсев нужных значений дело нескольких секунд. Правда кода такого поиска я не нашёл. Нашёл нечто схожее, с использованием страниц памяти (вроде так). Поиск и правда занимал 2-10 сек. Плохо только то, что в 60% случаев алгоритм вообще не находит нужных значений. Это всё проверялось на гварах. Плюнул я на это дело, когда понял, что и во время игры переменная может менять свой адресс в памяти (при открытии новых локаций). Export variable я не смотрел. Если адрес не изменяется во время игры - уже что-то.


Цитата:
Что за проблемы? Давай будем вместе решать.



Вот такие:

Во-первых, у меня так и не заработал ассемблер\дизассемблер Это так, к слову. Я как маньяк правил код вручную в хексовом редакторе (а вам слабо
Ну да ладно, это мелочи. Вот кусок текста:

Цитата:
1)Найдены все нужные функции в fallout2.exe
2)Программа, которая вызывается двигом фолла приспособлена под нужные задачи (убрана функция, которая дожидалась окончания работы вызваной программы. С ней фолл благополучно падал, если прога вызывалась не вначале игры)
3)Выключен вызов проги (ereg\reg32a.exe) при старте (именно её мы и заменяем на свою)
4)Выключено ограничение запуска этой проги (в оригинале данная программа должна запускать всего-лишь в течении 5 дней(?месяцев) с времени установки игры)
5)Установлен вызов проги при изменении данных (переадресация на нужную функцию).

Что отсталось сделать+мелкие проблемы

1)При вызове нужной программы винда переключается на неё, а фолл сворачивается. Нужно добиться, чтобы фолл оставался всё время активным. С этим пока не получается разобраться, хотя скорее всего, нужно поменять аргументы при вызове программы (функция имеет приблизительно такой вид: CreateProcessA("ereg\reg32a.exe", 0, 0, 0, 0, 0, 0, & V0, & (V104.cb), & (V148.hProcess)))
2)Ещё не успел разобраться, как фолл работает с гварами. Пока не знаю, как поставить проверку. Но не думаю, что это станет большой проблемой.
3)Передача аргументов в вызывающуюся программу. (Из оперы: Как это сделать руками или где достать нормальный дизассемблер...)



Для реализации динамики нужно исправить все прблемы. Для fonline - этот метод не подходит. Но раз уж просил... Метод с заменой функции мне нравится больше.

Цитата:
Эт ты про интерфейсные функции видимо. Что-то вспоминаю следующего характера - изменив какую-то строку в конфигурационном файле толи Маппера, то ли самого Фола можно обеспечить вывод отладочных сообщений, переменных и ещё всякой фигни в спец. файл.



Не только изменив файл, но и поставив патч (вроде от Нойда). И если мне не изменяет память - то не в файл, а на экран, хотя я не помню. А было бы здорово, всё меньше проблем. Как появится время посмортю. Кроме того, я даже знаю функцию, которая эти отладочные сообщения и выдаёт. Будем смотреть.

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 0:45 - 5 Мая, 2006
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Про гвары можно забыть - дебаггер отлично работает. При помощи него можно писать инфу из скриптов в файл.

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 10:15 - 5 Мая, 2006
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 ] Все собщения


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com