|
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
|
|
|
|