|
|
|
Канал Игры Мечты: «Скрипты» |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Значит в моем собственном проекте пришло время писать ИИ. Здесь особо выбирать не пришось - скрипты.. но зная КАК ОНИ ТОРМОЗЯТ решил не сильно их использовать.
Функция скрипта - управление игровым объектом (корабль,станция,ракета и т.д.)
пока применялось только для кораблей, т.к. именно им нужна сложная система поведения. Ну вот, например, атака на другой корабль. Алгоритм таков:
1-приближатся к объекту
2-при приближении на выстрел ракетой, собственно, выстрелить ракетой
3-при приближении на выстрел пушками использовать их.
4-при приближении на расстояние Х - улетать от объекта, а по достижению расстояния Y перейти к пункту 1.
В моём предложении я наткнулся на ограничения (обойти можно, но лучше посоветоватся и переделать). Даже на такой простом алгоритме поведения.
Вот. Цель данной темы обсудить скриптовую систему. Вообще как её организовать и что она из себя должна представлять.
_________________ MOV topka, C++ |
|
|
Executor
1860 EGP
  Рейтинг канала: 1(2) Репутация: 522 Сообщения: 9024 Откуда: Менск. Беларусь. Зарегистрирован: 09.05.2001
 |
|
Темка тут повисит недельку (надеюсь хватит), потом я ее в КИМ отфутболю. Так что будьте в курсе, что потом ее надо будет искать там, так как она не соответствует тематике данного канала.
Jurec : |
Здесь особо выбирать не пришось - скрипты.. но зная КАК ОНИ ТОРМОЗЯТ решил не сильно их использовать.
|
Я не программер, но, по моему, все зависит от того как и на чем их писать. Если делать как Эгософт, то конечно будут тормозить
_________________ Император Всея Галактики, Прилегающих Туманностей, Комет И Астероидов, А Также Планеты Ракксла, Буде Она Все-Таки Обнаружится :) |
|
|
SD
270 EGP
  Репутация: 30 Сообщения: 2544
Зарегистрирован: 05.03.2006
 |
|
Угу. Все упирается в скорость взаимодействия скриптового движка с игровым. Игософт пропускает его через два (или три) фреймворка в однопоточном режиме. Если же на скрипты выделить отдельный поток с прямым доступом в физику мира, проблем быть не должно.
|
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Да не стоит вопрос что быстрее, а что нет. Скрипты всегда будут медленне чем прямой код. И тут даже не вопрос взаимодействия.
Основной вопрос остается открытым - как организовать скриптовую систему. Или так - как она организована в х3.
_________________ MOV topka, C++ |
|
|
AlexYar
1916 EGP
               Рейтинг канала: 3(46) Репутация: 325 Сообщения: 32776
Зарегистрирован: 26.10.2003
 |
|
Jurec : |
Значит в моем собственном проекте пришло время писать ИИ.
|
ИИ для иксов, или просто ИИ как цель работы?
|
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
AlexYar : |
ИИ для иксов, или просто ИИ как цель работы?
|
Нет,нет. ИИ для моей собственной игры. А чтоб это ИИ написать неплохо было бы ознакомится с ним в других играх - вот, в часности в иксах.
_________________ MOV topka, C++ |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Ну вот, например, как бы вы написали скрипт нападения корабля "А" на корабль "В" используя какой-то псевдоскриптовый язык, синтаксис которого я оставляю на ваше усмотрение...
Поведение при атаке написано выше.
_________________ MOV topka, C++ |
|
|
aftermath
685 EGP
    Репутация: 234 Сообщения: 1316 Откуда: Нижний Новгород Зарегистрирован: 07.04.2006
 |
|
Jurec : |
как бы вы написали скрипт нападения корабля "А" на корабль "В"
|
А зачем придумывать скрипт? Можно за основу легко взять теже стандартные Егософтовские скрипты.
Что-то для меня так и остался непонятным сабж этой темы .
Нужны конкретные скриптовые реализации тех или иных действий или сама реализация скриптовой системы, ее взаимодействие с движком и т.п.?
_________________ В темном мире нет любви.
И в груди пусты сердца... (c) |
|
|
Krom
455 EGP
   Рейтинг канала: 1(3) Репутация: 159 Сообщения: 1988 Откуда: Горы Урала Зарегистрирован: 19.07.2005
 |
|
Jurec:
Стучись в аську, поговорим. Есть наработки. И ещё в канале Х2 как-то проводили турнир боевых скриптов для ястребков класса М3, можешь поискать вот тут на предмет исходников.
_________________ Не спешите меня. |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
aftermath : |
сама реализация скриптовой системы, ее взаимодействие с движком и т.п.
|
вот.
_________________ MOV topka, C++ |
|
|
akm
470 EGP
    Рейтинг канала: 1(3) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Космосиму нужны не столько скрипты как таковые, сколько ИИ и управление всеми объектами (преймущественно кораблями и ракетами). Как это управление будет осуществляться - выбирать разработчику, т.е. возможны:
1) процедурные вызовы тех или иных действий, например
Ship->Follow_Object(object_ptr, distance, timeout);
Ship->Fire_Missile_by(object_ptr, missile_type);
и т.д.
По сути требуется каждую из подобных процедур построить на более примитивных командах физическому движку либо других уже имеющихся процедурах, например, в теле процедуры Fire_Missile_by наверняка будет что-то вроде:
amount = Ship->get_Amount_of_Ware_in_Cargobay(missile_type);
if (amount <= 0) return 0;
Ship->set_Amount_of_Ware_in_Cargobay(missile_type) = amount - 1;
missile_ptr = Ship->get_Missile(missile_type);
timeout = get_Missile_Max_Distance(missile_type)/get_Missile_Speed(missile_type);
missile_ptr->Follow_Object(object_ptr, 10, timeout);
if (get_Distance(missile_ptr, object_ptr) <= 10) missile_ptr->BOOM();
2) интерпретация скрипт-команд. Фактически то же самое, только игра даже после компиляции останется открытой для доработки ИИ, т.к. вместо "зашитых" имен процедур будут употребляться скрипт-команды, а движек игры будет на лету распознавать по тексту команды, какую именно процедуру вызывать и какие ей передавать параметры, т.е.
+: гибкость
-: некоторая потеря производительности на интерпретацию команд/параметров.
Теперь самое сложное, не зависимо от выбранной концепции, - это обеспечить одновременное выполнение десятков тысяч процедур(скриптов), порождаемых тысячами объектов во вселенной. Проблема тут не столько заставить их выполняться одновременно, сколько избежать конфликтов этого множества скриптов из-за того, что, например один скрипт отправляет корабль на станцию, другой его разворачивает в целях избежания коллизии, третий попросту корабль уничтожает (уже высвобождает ресурсы), а четвертый в это время уверен, что корабль еще припаркован на верфи, т.к. в момент поиска кораблей по какому-то критерию, запущенного еще многие миллисекунды ранее, этот корабль действительно был еще на верфи и никуда не летел... Короче, разрешение подобных граблей нужно предусматривать заранее в самом сердце движка игры.
Если кратко, можно построить этот движек так:
1. Нужен один общий стек, куда будут скидываться на выполнение абсолютно все скрипт-команды (или вызовы процедур). Порождаться такие команды очевидно будут движком ИИ, действиями игрока, событиями во вселенной и собственно другими командами/скриптами. Выполняться же они будут в порядке живой очереди в соответствии с приоритетами и таймаутами. В идеале выполнение организовать в произвольное количество потоков (выбираемое в дальнейшем на основании конфы железа игрока и др.)
Т.е. в стек команд, например, может помещаться такой набор чисел для каждой из активных команд:
A) указатель на объект, на котором выполняется команда
B) указатель на скрипт (или стек объекта), где выполняется команда
C) внутриигровое время, ранее которого выполнять данную команду не следует
D) приоритет команды (в глобальной сетке)
2. Алгоритм арбитра, отбирающего команды на выполнение, примерно такой: регулярно пробегаемся по всем командам в стеке и выбираем (например в отдельный массив) те команды, время выполнения которых уже подошло. Если найдено более 1 команды, то пробегаем по данным отобранным командам и находим с макс приоритетом. Выбранную команду удаляем из стека и выполняем.
Примерно так реализовано в Х2/Х3, хотя это и не самый производительный вариант, но довольно простой.
|
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Супер! akm, вот ты то мне и нужен.
Ув. модераторы! Можно пинать в КИМ.
_________________ MOV topka, C++ |
|
|
aftermath
685 EGP
    Репутация: 234 Сообщения: 1316 Откуда: Нижний Новгород Зарегистрирован: 07.04.2006
 |
|
Перенесено по просьбе автора
_________________ В темном мире нет любви.
И в груди пусты сердца... (c) |
|
|
|
|
|
Канал Игры Мечты: «Скрипты» |
|