Перейти к контенту

Поиск в системе

Результаты поиска по тегам 'Academy'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Категории

  • Правки для ОП-2.2
  • Вопросы по правкам / настройке ОП-2.1
  • ЧаВо по форуму
  • Шпаргалка AMK: Основы
  • Шпаргалка AMK: Ковыряние
  • Шпаргалка AMK: Оптимизация
  • Шпаргалка AMK: Работа с консолью
  • Справочник вылетов (Line 1 - Line 100)
  • Справочник вылетов (Line 101 - Line 200)
  • Справочник вылетов (Line 201 - Line 400)
  • Справочник вылетов (Line 401 -)
  • [CoP] Библиотека моделей оружия

Форумы

  • S.T.A.L.K.E.R.
    • AMK мод
    • Школа моддинга
    • Мастерская ТЧ
    • Мастерская ЧН
    • Мастерская ЗП
    • AMK English Version
  • S.T.A.L.K.E.R. 2
    • Предрелизный раздел S.T.A.L.K.E.R. 2
  • Общий форум
    • Флейм
    • AMK Склад
    • Административный раздел
  • Сетевые баталии
    • Сетевые баталии
  • Metro 2033 и Metro: Last Light
  • Другие игры
    • FPS / Action
    • RPG / RTS / TBS
    • Гонки / Симуляторы
    • Квесты/Аркады
    • Онлайн игры
    • Разное
    • Консоли
  • Форум клуба Клуб "Звуковиков"
  • Форум клуба Клуб Бункер Бобра
  • Общая тема Клуб разработчиков
  • Torque 3D Клуб разработчиков
  • NeoAxis 3D Клуб разработчиков
  • Unity Клуб разработчиков
  • Unreal Engine Клуб разработчиков
  • CryEngine Клуб разработчиков
  • OGRE 3D Клуб разработчиков
  • Свободная вкладка Клуб разработчиков
  • Blender Клуб разработчиков
  • Lumberyard Клуб разработчиков
  • Приемный покой Клуб "Безумный Психиатр"
  • Форум клуба Клуб "TEXCOORDN;"
  • Темы 'Фанат Отчуждения'

Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


Звание


Карта банка


BTC (Bitcoin)


ETH (Ethereum)


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Реальное имя


Город


Интересы

Найдено 12 результатов

  1. Первый параграф в статье. Самый черновой вариант. Документ на Google Disk. https://docs.google.com/document/d/1qgkkpIrz5Gie8p58AF-7y9iRZXEp7Xmn17gJT3uy5zQ/edit?usp=sharing Важно мнение по манере изложения. Понимаю, мало информации... Но все же, как считаете, сам процесс подачи информации будет понятен пользователю?
  2. Ковыряемся в исходниках SoC. На данный момент тема ориентирована в большей степени на новичков. Здесь будут собираться готовые решения по мелкому ковырянию исходников движка SoC. Собственно приглашаю всех желающих присоединиться. Сборка исходников, необходимые программы. Расширения для диалогов: Скрытый текст Один из вариантов реализации случайных фраз у диалогов. Автор: Winsor. Часть 2. + немного переделанная функция дампа xml Автор: Winsor. Исправление ошибок: Скрытый текст Исправление отображения зеленым цветом прочитанных записей в разделе КПК "Дневник". Автор: lvg_brest Маленькое исправление колбека before save. Нашел: Карлан. Исправление сохранения клиентских объектов. Автор: Shoker Фикс вертикальной синхронизации (r2) Автор: SkyLoader Фикс не отключения ПНВ при удалении броника ф-циями release\transfer_item или продаже\выкладывании в другой инвентарь, автор: UnLoaded Исправление вылета по отсутствию звука. Путь до звука выводится в лог (как с текстурами в ЗП). Исправление пулестойкости костюма. Расширение скриптового функционала: Скрытый текст Функции, возвращающие текущий год и месяц. Функция перемотки времени из CoP. Создание колбеков для Актора на примере колбека на удар ножом. Назначение скриптам горячих клавиш, изменяемых в главном меню. Создание функции, перебирающей предметы на поясе. Работа с интерфейсом (худ, инвентарь и т.п.): визуальная часть: Скрытый текст Редактирование загрузочного экрана. Создание нового индикатора на худе. Расширение геймплея: Скрытый текст Создание нового слота. Новые параметры для бронежилетов. Восстановление функции рождения артефактов при срабатывании аномалии. Автор: Bak Добавление изменения переносимого веса в свойства артефактов. Массовое перемещение предметов между окнами, Автор: UnLoaded Зум в один клик. Автор: Shkiper2012. Дополнение: Kondr48 Порция мелких правок от Shkiper2012. Работа с рендером: Скрытый текст Скриншоты в формате png.
  3. Статья больше обзорная, там нету примеров скриптов, там лишь немного текста. Может быть эта статья не нужна, но я хотел начать с чего-то такого. Ссылка. Критикуем.
  4. В данной теме планируется предоставление комплекса статей по созданию, редактированию и корректированию упомянутого в названии темы. Знающих, о чем идет речь - милости просим. Теория: Общая структура погоды. Причастные файлы. Внутриигровая структура погоды и освещения. Смена циклов. Классификация существующих погодных схем. Сравнение. Работа с файлами конфигураций: Перечень и классификация причастных файлов. game_maps_single.ltx, environment.ltx. Конфигурационные файлы динамических схем и сторонних модификаций. Амбиент - фоновые события и звуки. env_ambient.ltx. thunderbolt.ltx, flares.ltx. Прочие "несекционные" файлы. Главные файлы конфигурации погоды. user.ltx Скриптование погодных схем: "Тени". level_weathers.script. "Чистое Небо" и "Зов Припяти". AMK и другие сторонние схемы. Причастные из текстур: Папка fx. Скайкубы. Формат. _small. Упоминания в textures.ltx. Пункты, помеченные Numix-красным, составляют мою головную боль, т.е. по забывчивости, либо незнанию не могут быть написаны мною. По ним требуется помощь сообщества. По остальным пунктам приветствуются замечания, корректировка, обсуждение и проч. В данный момент, пока материал еще не готов, приветствуется генеральное обсуждение темы, а также замечания в сторону самого плана.
  5. @gurich О СЦЕНАРИСТАХ И СОЗДАНИИ СЮЖЕТА Кто такой "хороший сценарист"? Какие качества могут определить человека как сценариста, и какими качествами сценарист обладать не должен? Какова его роль в команде? Допустим ли безудержный полет фантазии сценариста на тех или иных этапах разработки сюжета? Какие ошибки типичны для непродуманных сценариев? В чем заключаются скрытые для сценариста возможности сюжета? Ответы на эти и другие вопросы - в статье ниже. "...Верить в наше время нельзя никому, порой даже самому себе. Мне — можно." (с) "Семнадцать мгновений весны" Поначалу сама необходимость писать статью на тему "написание сценария в Сталкере" поставила меня в тупик. Правда, просьба это сделать - это необычно, потому, наверное, я это и пишу. Игре уже прилично лет и я попытался отмазаться, мол, играют и в третий "Дум" еще, но не все же. Но попросивший тут же парировал - "я еще и во второй играю". 1. Вниманию самих потенциальных сценаристов. Вы пойдете по грани между профессиональным равнодушием и точащим Вас фанатством. Запомните и вырубите топором: сценарист - самый несчастный человек из геймеров. Нет, давать выход творчеству - это кайф. Но в остальном, подумайте сами: он ведь знает, о чем все будет - еще тогда, когда игра даже в тест не пошла. Определенно, вы получите кайф и пафос при выходе мода/игры, но вам не перепадет ни крупинки удовольствия от первого прохождения полностью рабочего продукта. Поверьте, те крупицы новизны от вводимых новаторств и чувство "я узнаю все раньше всех", свойственные нетерпеливым, будут буквально с концами и хвостами засосаны трясиной тестов, лагов, сомнений и критики соработников. Плюс сценарист - чемпион по отвергнутым коллегами идеям. Вся широта вашей фантазии будет нещадно зажата правилами и возможностями. Да и просто вредностью, иногда. По этой причине стрессоустойчивость - ваше ментальное "я". Пока новая для внешнего мира идея войдет в мод - к тому моменту для Вас она будет заветренным куском кровоточащего мяса души, искусанного коллегами. Ужос, да? Это все не к тому, что сценаристов надо жалеть или типа того. Вот ни фига. Это просто констатация и право на место в общем творческом процессе. Ну и потом, попытка отговорить тех, кто чувствует в себе сомнения, что вытянет процесс до конца. Это надолго, это большая и муторная работа, на месяцы, как минимум. Хотите признания раньше - не беритесь за сценарий и пишите фанпик-рассказы для форумов или книжек. Хотите игру - Вам придется замолчать надолго. 2. Среди "технарей" - мапперов, скриптеров, моделлеров - бытует пренебрежение сценарием, да и сценаристами тоже. Тут же люди что-то сами умеют, а выдумывать типа каждый может. Одна беда: когда доходит до дела - оказывается, что техническая дотошность и системность мышления, свойственные технарям, малосовместимы с чистой фантазией. Исключения, наверное, есть, но мне не попадались. Может поэтому большинство квестов той же НС однотипны? Они просто похожи на то, что уже было и их становится много, всего этого отнеси-принеси-подай. Почему так происходит? А потому, что технари в модинге проводят свою часть работы, основываясь на уже известном материале - условиях игры, компонентах программы, на срабатывании уже известных процессов, на уже известных цепях последующих догматических сюжетных событий, в том числе и на оригинальном сюжете. До казуса. Только один пример: в АМК2 решили делать изначально свой сюжет. Вообще свой. С новой логикой НПС даже. И вот, там, где изначально только Кордон перепиливался раза четыре - первые рассуждения о НОВОМ сюжете были примерно таковы: "Шустрый, что с ним?", "Сюжет до АТП" и т.п. Вот, ребят, серьезно: представьте, вы переделываете всю локу, впиливаете туда переходный тоннель на Болота, переиначиваете геометрию, высаживаете новые растения, врезаете новые строения, собираетесь полностью перезаселять НПС с новой логикой! На это заморочки хватает. А на сюжет - опять Толики, раненый Шустрый, еще более раненый Лис, бандиты на АТП... Почему? Да потому что вокруг объектов должны происходить уже догматические события. Не, когда вы работаете по оригиналу, не морочитесь перепиливанием карты и просто добавляете элементы - понятно, почему в игре остаются все те же персонажи. Но раз решили новый сюжет, раз ни фига себе - локу ковырять... Я не хочу сказать, что сценарист вам жизненно нужен и жизненно важен. Главное, чтобы ВЫ это сказали. Если, конечно, действительно нужен, что опять-таки ВАМ решать. 3. Еще одна частая ошибка - бег впереди паровоза. Среди моих жизненных приключений был такой случай: я работал в фирме по ландшафтному дизайну и озеленял одного банкира, в частности делал газоны. И банкир попался типа податьсюдаящаплачубазаранет! Так вот, чтобы ему дружков принимать было кузяво, он заказал сделать газон не по проекту: не весной, как планировали, а накануне, в конце предыдущего лета. Сделали. И в конце осени пришли ребята рыть канализационные коллекторы в соответствии с графиком работ. Угадайте, что случилось с газонами? Так и здесь. Общего сценария на три-пять листов с погрешностью плюс-минус лока вполне достаточно, чтобы очертить список локаций и события на них. Не спешите развивать детальный сценарий до окончания работы над локами. Если, конечно, команда прямо не делает локи под сценарий. Но если вы именно модифицируете - дождитесь билдов локаций. Иначе сюжет может уйти в "планы", под которые не будет реальных декораций, сценарий превратится в мечту, а сценарист по сути будет просто впустую развлекать сюжетами соратников, за счет того времени, которое мог бы потратить, например, на идеи, диалоги и квесты. Задача сценариста - благоустройство сделанной основы, а не сказки на ночь. Эта часть текста - для тех, кто понял, что сам сюжета не осилит и задается вопросами. Опустим период самотерзаний "нужен или нет", предположем, что команда решила: нужен сценарист. Предположим, у нее есть кандидаты. Ну, мало ли фанатов... 1. Искать специалиста в проект - примерно как искать музыканта в группу. Есть платные профи, есть живущие одним днем, есть самородки, отмороженные восторженные сектанты и просто "мне пацаны сказали, я отлично ору "Оле-оле-оле", я пришол петь". Далее рассматриваем ненаемный вариант, потому что с работой за деньги все понятно и так. Отличных парней много, но у всех есть задачи, стремления и ценности. Для начала выведайте, чего хочет от процесса сам кандидат. Лично он, если рассматривать его как автора. Это отличный тест на перспективу. Он как-то себя(не команду) хочет реализовать, вот это и важно. И готов ли вложить в это самую большую ценность в мире - свое время. И сочетается ли его конечная цель с результатом команды. Если не сочетается - вы так и так разбежитесь. Например, хорошие мотивации: человек может хотеть набить руку, попрактиковаться в прозе, диалогах, выпустить сборник рассказов, реализовав их в игре/с игрой и т.п. 2. Попросите кандидата сочинить пробный сценарий или рассказ на ваших вводных: местность, население, конкретная незаурядная ситуация. Например, в Зоне нашли нефть.)) Не предоставить уже готовое, а именно сочинить с нуля. Если ему жалко для будущего коллектива 50 тысяч знаков - зачем вам такой жмот? Он будет лениться и дальше. Разумеется, пример нежмотства должна сначала показать команда - продемонстрировать свои возможности и возможный будущий проект. Это отличный стимул и посыл к возбуждению энтузиазма. И если она сама ничего не может показать - какого ляда она может требовать? 3. Не устраивайте эшелонированных конкурсов, тридцати трех туров, если у вас нет трехсот тридцати трех кандидатов. Не пытайтесь выглядеть суперофициально, обильно сыпать пресс-релизами, если на деле вы группа парней-энтузиастов. Умный человек пафос и вранье увидит и его это оттолкнет. Вам нужен тупой сценарист? Не мучьте человека неопределенностью и переносом срока ответа, изображая из себя начальство. Ожидание - самый страшный враг энтузиазма. Или вы работаете на нем или готовьте деньги, в любых других случаях получится тягомотина. 4. И главное - сценарист должен быть генератором новых идей. Если он написал правильное сочинение, на 100% по вашим вводным деталям - у него проблемы с фантазией. Нормальный остаток "вашего" - 50-70%. Меньше "вашего" - он выдаст вам кучу романтичного, но нереализуемого или несоответствующего изначальному концепту. Больше "вашего" - скорее всего новое вы будете придумывать за него. В данной части по умолчанию предусматривается, что в команде сценарием заняты несколько человек. Кто-то пишет диалоги "о погоде", кто-то изобретает квесты, кто-то собирает события в основную линию и ведет главного персонажа. 1. Определитесь с иерархией. Иногда в припадке демократичного заблуждения "три головы лучше" всем дают "равные права". Не должно быть более одного главного сценариста, иначе конкуренты будут тянуть одеяло на себя и процесс/результат однозначно проиграет. Лично мне более чем знакомы ситуации анархичного ввода в состав дополнительных сочинителей, которые после отказа им лично просто в отместку будут рубить Ваши инициативы просто потому, что они - Ваши. Вот именно поэтому нужен старший, редактор, который ведет основную линию. 2. Каждому давайте свое задание. Диаложнику - писать диалоги. Квестовику - сочинять квесты. Редактору - согласовывать общую линию, зашлифовывать ее в общий сюжет. И требуйте результат, в срок. Если диалоги стоят, а у их генератора полно других идей - вы не того взяли, это балласт. 3. Выработайте политику диалога персонажей. Если ГГ у вас сыплет прибаутками на локации Затон, но сух как дрова на локации Болото - ежу понятно, что вы отдали персонажа на откуп двум очень разным людям. В большинстве ситуаций диалоги нужны для функционала, но в случае с Сидоровичем, Сахаровым, Доктором или Меченым лучше отдать персонажа кому-то одному. Назовем это дубляжом. Пусть ответственный за персонажа просто стилистически редактирует финальный текст "своих" реплик, этого достаточно и никто не обидится. Ну и, конечно, персонажи не должны говорить с одного языка, когда лексика их всех - одна и та же. 4. Старайтесь избегать полной отдачи локаций в работу отдельным сценаристам, так как в этом случае рискуете получить провал динамики: на Агропроме только что были вьетнам&немцы, а следом за этим в Темной Долине - куча разговоров с меланхоличным постреливанием. А то и без постреливания. Просто отдельные наблюдения. Так как сценариста касается практически все - понемножку обо всем. 1. Квесты. Всех запарили квесты типа: 1) найди мне это, 2) принеси мне то, 3) принеси мне это в обмен на то, 4) найти того-то, чтобы поговорить о том, где взять это и что надо принести в обмен. То есть, все нормальные люди стоят столбами в Зоне, а посреди мечется ошпаренный Меченый, над которым все ржут. Что делать? Пишите квесты как полноценные сюжеты, пишите суперквесты. Суперквест - это модульное задание, которое по мере выполнения обнаруживает в себе дополнительную не просто информацию, а полноценную историю, многоступенчатое приключение, полностью автономное от основного сюжета. Сюжет целой игры написать, само собой, трудно, это процесс коллегиальный, но просто приключение на пару дней игры - не такая уж и проблема и вполне по силам одному человеку с фантазией. Начинается всегда с загадки. Например: обнаружен целый неразоренный дом без жильцов, найден грузовик необработанных алмазов, в Зоне пропал Билл Гейтс, Лесник вырастил редкий сорт барбариса, на кустах которого вырастают лечебные ягоды... Сможете придумать начало - придумаете и продолжение. ГГ не должен искать вещь № 22054, а может узнавать новую сюжетную информацию. Конечно, это будет несколько длиннее "принеси-подай-убей", но выглядеть будет лучше. Придумывайте новые обстоятельства для повторяющихся квестов. Например: жетон-смертник в каждом НПС. Это дает почву для а) поиска людей, б) поиска тайников, оставшихся от мертвецов, в) поиска убийц сталкера или свидетелей убийства. 2. Практически любое задание так или иначе основывается на выполнении какого-то действия. Взять/отдать предмет, вступить в диалог, убить существо. Но при этом ничто не мешает красиво оформить это, напускать пыли в глаза. Кошмар игры - буквальность промежуточных заданий. "Взять артефакт у Седого", "доложить Леснику" - вот эти вещи зачем? "Вернуться к Сидоровичу" - это вообще что-то запредельно унылое. "Пойти в Темную Долину"-"расспросить сталкеров"-"поговорить с Бывалым"-"обнаружить мутанта"-"спасти Гарика"-"Вернуться к Бывалому"-"поговорить с Гариком"-"найти образец части тела мутанта"-"вернуться к Бывалому-2"-"доложить Сидоровичу". Неужели нельзя как-то более общими словами, например: "Выяснить, почему пропадают люди в Темной Долине". Пусть вместо всей скукотищи игрок лучше читает рассказ в частях и лицах! Все эти пинки с амебными поступками и командами на каждый чих просто ужасны. В АМК2 в спорах аргумент "недогадливый игрок" звучал практически постоянно. Отсюда были команды типа "убрать оружие за спину", "следовать на Унылым", "исследовать локацию" (ты на нее и так зашел, умник, не догадаешься, ага)... К сожалению, за два года общения вот лично мне убедить коллег по цеху не всегда удавалось. Ну да, вот не догадается игрок получить награду у кого надо, ему надо телеграмму прислать. Более чем достаточно уведомления "задание выполнено, награда ждет". Можно вообще обойтись значком "выполнено" в ПДА. А в остальном почему не сделать сплошные ребусы и загадки? Это же игра, а не техпроцесс. 3. Экономика в игре не работает. Для матчасти квестов это просто архикритично. Награды в оригинале смехотворны, никто ими не живет. Это очевидный факт. Экономика не просто перекошена, она именно не работает. У ГГ нет потребностей, лута валом. Не надо урезать лут и задирать цены, это только стопорит экономику. Надо - создать активные потребности ГГ. Усильте оборот. Пусть торгаши покупают артефакты наборами или в товарных количествах, чтобы их не найти за 3 дня. Пусть опознание артефактов сопровождается поиском информации для этого(а она ой как глубоко спрятана). Пусть добыча из аномальных полей требует специальной подготовки. Меченый пойдет к торговцам. Вот. Именно это и требовалось. И цены вдвое выше номинала будет достаточно, ГГ начнет покупать. Сделайте так, чтобы патроны БП нельзя было найти и чтобы только они пробивали броники. ГГ начнет покупать. Сделайте так, чтобы ГГ хотелось пить каждые 4 часа и бутылки с водой не валялись под ногами. Куда он пойдет за водой? Если еда будет через сутки в тайнике заражаться, а через двое - тухнуть и пропадать - куда он пойдет за жратвой? Сделайте модернизированные стволы в Зоне обыденностью и по большей части хуже по качеству, чем немодернизированные. И ГГ начнет покупать обычные АКСы. Сделайте их ремонт прерогативой только военных и он будет общаться с ними. Все это так или иначе перерастет в квесты, то есть - в пищу и работу сценариста. Торговля, арты, оборот оружия, а главное - обоснование, легенда для всего этого - должны быть вписаны в общий концепт. Даже крайнюю несправедливость (если она нужна игре) игроки примут без сомнения, если жестокая необходимость к ней будет прописана в жизни Зоны, а это работа исключительно хорошо подвешенного языка. То есть сценариста. 4. Пожалуйста, старайтесь избегать деления на "правильных" и "неправильных". Убогие бандосы, хайлеправильный "Долг", обкуренная "Свобода", похрендым-невояки-ученые... В Зоне ты или сильный или мертвый, так? А прав или не прав - вопрос второй. ГГ вообще самый главный мародер, сколько трупов обыскал! Пусть отдельные представители группировок поступают так, как никто не ждет. Пусть ученые хотят денег, пусть долговцы убьют человека по заказу спецслужб, пусть вас спасут бандиты! Ну, хоть разок. Глядишь и интереснее будет, чем валить всех, кто не той масти. 5. Больше мистики! Не волшебников в голубых вертолетах, которые и так порой возникают из неоткуда, чтобы скупить грошовый лут, которого не хватит на потраченный керосин, а мистических мыслей в персонажах! Они не профессора естественных наук. Пусть ГГ отправят ловить ведьму, убить лешего или утопить водяного! Другой вопрос, что он там найдет. Согласитесь, это поинтереснее, чем "принеси мне 134-ю синюю флешку". Формируйте загадку, разгадки все равно в большинстве своем технически не так интересны. Сталкеры суеверны как никто другой, так дайте слухов, поверий, примет - пусть даже самых идиотских! Каждое поверье - потенциальный квест и его интересность прямо зависима от задумки этого мракобесия. 6. Пусть каждый делает свою работу, только свою и в срок. Сценарист не должен изобретать новую сетку артефактов, маппер не должен моделить квестовые предметы, экономист/скриптер не должен писать диалоги. При самом удачном стечении обстоятельств при разработке с нуля сюжета мода у вас на локу уйдет месяц. Посчитайте сколько лок. Вот, почему не стоит откладывать на завтра то, что надо было сделать вчера. В АМК2 был один маппер, который за весь срок пребывания в команде взялся за две локи, еще две придумал и тоже взялся, в итоге не сделал ни одной. Зато идей куча, оно да. 7. Насыщайте событиями территории, с которых ушел основной сюжет. Брошенные локации - это дико скучно. Только не стоит гонять принудительно игрока то на Кордон, то в Припять, лишь бы набегаться и было бы посложнее. Это не сложность, это нудятина. Гораздо лучше использовать локальные суперквесты. Если не осталось загадочных объектов - вводите загадочных персонажей, новые аномалии, просто идиотские ситуации. Неожиданная военная комиссия, контрабандисты протянули кабель и организовали аномальную электростанцию, в округе видели говорящего кровососа, сталкеры рассказывают о призрачном притоне игроков в буру - подобное ведь можно впихнуть вообще в любую точку Зоны. 8. Не тащите политику в игру. По-человечески коробит от закидонов типа "раз это Украина, то должно быть на мове/гривна/СБУ". Это в конце концов вредно просто атмосферно: средний россиянин вряд ли имеет представление о ментальности украинских чиновников, есть люди не видевшие Карпат и они им по барабану, а усредненный минчанин вряд ли поймет смысл московских анекдотов про "новых русских". У каждого из нас есть прелесть локализации жизненного пространства. Это вполне доступно передать в персонажах на фоне нейтрального окружающего мира: просто военные, просто ученые, просто какие-то деньги и т.п. Что б не поучилось как с некоторыми отмороженными при игре в "Метро 2033", где одна крайность - "ой, это МОЯ станция", другая - "этот ...рас автор специально в сюжете Москву взорвал". А про знаменитый русофобский трейлер с НКВД-шником в надраенных сапогах вообще молчу. Все проще: или играем, или не играем. Или все серьезно, но тогда это в другую песочницу. 9. Сценарист обязательно должен быть тестером. Что б неповадно было фантазийные эксперименты на других ставить.) Ну и потом, так быстрее познаешь динамику игры, ее возможности и невозможности. (C) 2014, Дмитрий Гурыч. Рецензия @Murarius
  6. AI-Map в X-Ray: теория, практика, ошибки Статья по возможности расскажет о том, что такое Аи-Карта, как ее правильно сгенерировать, как скорректировать до рабочего состояния. Больше рассчитана на людей, которые более-менее знакомы с СДК, но все равно старался писать максимально подробно. 1. Теория 1.1 Что такое AI-Map? АИ-Карта - площадь на уровне, заполненная аи-узлами (нодами), контролирующие или ограничивающие перемещение НПС/Мутантов (Далее - боты) по уровню. В сталкере существует два типа сущности: либо что-то онлайн, либо оффлайн. Онлайн обычно ограничивается видимостью вокруг ГГ (В оригинале 150 метров). В онлайне боты перемещаются по аи-карте, в оффлайне же они перемещаются по точкам - графпоинтам. Когда моб попадает в видимость ГГ, он переходит из оффлайна в онлайн - это те самые моменты, когда игра зависает иногда на несколько секунд и движок переключает объекты из оффлайн в онлайн. Аи-карта должна быть цельной, не имеющая разрывы между нодами. Рис. 1 - Аи-карта в СДК (Редактор уровней для игры) На картинке видно, как аи-сетка огибает статические объекты. Это не ошибка редактора, так и должно быть. Дело в том, что мобы в игре не видят статические объекты, они видят только аи-карту и перемещаются строго по ней. По этому, если аи-сетка будет проходить сквозь статический объект (Дерево, автомобиль, дом и т.п) то моб спокойно пройдет сквозь него. Рис. 2 - Соединение нодов между собой На изображении видно соединение нодов между собой и направление каждого из них. В зависимости от количества сторон, куда может вывести нод, ноду причисляется свой цвет: 1) Полностью серый нод - все 4 направления; 2) Нод с 1 оранжевым ребром - 3 направления; 3) Нод с 2 синими ребрами - 2 направления; 4) Нод с 3 зелеными ребрами - 1 направление. В самом худшем случае нод имеет красный цвет, это означает, что нод не соединен с основной сеткой. Его нужно либо удалить, либо присоединить к основной карте. 1.1.2 Немного интересных фактов о АИ-Сетке (Спасибо Desertir): 1. При проекции на плоскость XZ представляет собой ноды 0.7х0.7 2. Ноды (или лв) нумеруются с юга на север, с запада на восток. 3. Нулевой вертекс самый западный, однако не всегда самый южный. 4. Вертекс имеет координаты X и Z кратные 0.7 (размеру ноды). 5. Если лв различаются только координатой У (на разной высоте), то нумерация чередуется (что нумеруется первым, верхний или нижний, пока не известно). 1.2 Какой максимальный размер АИ-Карты? Общий максимальный размер карты в среднем включает в себя 3.000.000 - 3.500.000 млн. плотно заполненных аи-нодов, что равняется уровню примерно равному 1.3 х 1.3 км (На данный момент GSC выложили исходные коды в свободный доступ, что увеличивает вероятность увеличения этого ограничения в ближайшем будущем). Так же следует учитывать и точки для оффлайна - графпоинты, чем больше аи-сетка, тем больше должна быть их плотность. Ограничения компиляторов xrAI (Возможно, на данный момент) не дают возможность сделать большой уровень, который можно наполнить жизнью, потому что если превысить среднее значение нодов в 3 млн и более 400 графпоинтов - компилятор будет валиться с ошибками. Конечно, никто не мешает сделать большой уровень сам по себе как таковой (Геометрия), тем более недавно выпущенные х64 компиляторы позволяют тянуть более тяжелую геометрию уровня, но наполнить его событиями не получится, либо нужно ограничивать размер АИ-Карты. 1.3 Что такое графпоинты и для чего они нужны? Если моб становится оффлайновым (Уходит из зоны видимости ГГ, заданным в alife.ltx), то движок переводит его в режим "оффлайн" и моб отправляется ходить по графпоинтам, от точки к точке перемещаясь, как бы живя своей жизнью. Графпоинты - особые точки, которые существуют только на АИ-Карте. Графпоинты видны в СДК, их можно редактировать расставляя как угодно или удаляя их, но в итоге после компиляции под формат игры, графпоинты не будут являться частью игрового уровня или all.spawn: компилятор xrAI переводит графпоинты в вершины игры/уровня (в глобальный граф). Все оффлайновые мобы могут перемещаться по этим точкам, не считаясь с переходами между уровнями (Как для ГГ), то есть для них графпоинты каждого уровня одна большая бесшовная карта, по которой они ходят, по этому и происходят в сталкере многие оффлайн-события, особенно в модах (Типа АМК) без участия игрока, например НПС с Кордона ушел в Бар, на Складах убили сталкеров, пока ГГ был в Припяти и т.д. Следует заметить, что расставляя граф-поинты в СДК, они должны находиться строго на АИ-карте, не должны проваливаться под сетку или висеть над ней, каждый граф должен стоять на ноде - иначе будут ошибки. Рис. 3 - Выделены все графпоинты на локации Кордон. 1.4 Какие файлы относят к АИ в игровых архивах (Или gamedata)? *gamedata/levels/level_name/level.ai - Сами ноды уровня, которые образуют единую карту, запечатаны в этот файл. *gamedata/levels/level_name/level.graph (Только ТЧ) - содержит в себе графпоинты с уровня. В папке с локацией в игре не нужен, нужен только для работы в СДК и xrAI. *gamedata/game.graph (Только ТЧ) - в этот файл запечатаны все т.н вершины (графпоинты) с локаций, подключенных к игре (Собирается из level.graph-ов). Глобальный граф. *gamedata/levels/level_name/level.gct (Только ТЧ) - является кросс-таблицей уровня. level.gct.raw - этот файл создает xrAI и является копией (промежуточной версией?) основного файла. В играх серии "Чистое Небо" и "Зов Припяти" дела обстоят немного иначе, все файлы относящиеся к АИ кроме карты уровня запечатываются в all.spawn. 2. Практика 2.1 Создание AI-Map Итак. Будем считать, что с общими понятиями этого аспекта игры мы разобрались. Настало время поработать по делу и создать свою АИ-Карту для, возможно, своего уровня. Поехали. Для того, чтобы создать сетку, Вы должны убедиться, что Ваш уровень готов к игре: на нем стоят все статические объекты, локацию окружает фейк-стена. Если все готово, то идем далее: Шаг 1. Подготовка уровня. Обязательно нужно "окутать" локацию фейк-стеной (Должна быть замкнута между собой, не иметь дыр), она не даст пройти аи-сетке за нее, что ограничит нас от лишней работы - удаление вручную АИ-Нодов, которые залезли за пределы игрового уровня. Специально создавать ее не обязательно, если Вы делали уровень (Может, был готовый) как полагается, то вокруг забора уже должна быть фейк-стена, которая не даст ГГ перепрыгнуть через забор. Просто копируем ее и опускаем ниже, чтобы она вошла где-то на половину в землю. После генерации АИ-Карты скопированный фейк-объект можно удалить! Рис. 4 - Фейк-стена для АИ-сетки скопированная из стены для ГГ Шаг 2. Выделение объектов Итак, уровень готов, на нем есть все нужные объекты. Идем дальше. Теперь нам нужно добавить все статические объекты уровня в снап-лист, т.е объекты, которые АИ-Сетка будет огибать во время генерации (Прим.: если в статическоем объекте есть дыра, например это здание с дверным проемом, то Аи-Сетка туда заберется и сгенерируется). Вообще, самый простой вариант - это сделать Ctrl+A выделив тем самым все объекты на локации, но мы пойдем немного иным и разумным путем. Дело в том, что кусты на уровне при таком выделении тоже соответственно будут выделены, что не очень хорошо, ведь ГГ может ходить сквозь кусты, так почему мобы не могут? Плюс порой это может вызвать эффект неожиданности, если на тебя из кучи кустов вдруг выпрыгнет кровосос! По этому делаем немного иначе, находясь в режиме работы с объектами (Кнопка Object) заходим в Object List и выделяем мышкой сами все объекты, кроме кустов. Т.к список объектов сортируется по алфавиту, то кусты порой могут оказаться в середине списка, например, и их нужно обойти и не выделить. Сделать это можно зажав Ctrl перед началом выделения и тогда можно выделять объекты выборочно, а нужные объекты конечно смотрим по названию. Рис. 5 - Выделены все объекты, кроме кустов через Object List. Шаг 3. Генерация АИ-Карты Уровень готов, нужные объекты выделены, пора сгенерировать саму аи-сетку. Переходим во вкладку AI Map, далее жмем Commands > And Select To List (Добавить выбранное в список), Рис. 6 - Добавление объектов в список все наши объекты добавляются в снап-лист. Далее жмем на кнопку добавления (Чайник вверху слева, либо горячая кнопка А(ф)) и добавляем на террейн как минимум 1 аи-нод, но лучше раскидать их несколько штук по уровню. Рис. 7 - Одиночные ноды расставленные перед генерацией. Для лучшего покрытия уровня нодами, жмем Ignore Constraints, далее жмем Generate Full - и ждем генерации Аи-Карты для уровня. Процесс может занять несколько минут, зависит от тяжести уровня (ПК, на сколько мне кажется, роли не играет, СДК живет своей жизнью) Рис. 8 - Сгенерированная карта на уровне Как видно на рисунке выше, аи-сетка расстелилась по уровню, прошла под кустами, но обошла дорожные знаки. Теперь в игре мобы будут пробегать сквозь кусты, как и ГГ, но оббегать вокруг препятствие в виде знаков. Рис. 9 - Карта внутри фейк-стены Как и говорилось ранее, аи-сетка не залезает за замкнутую фейк-стену. По желанию можно "разгладить" сетку нажав на кнопку Smooth Selected (Предварительно выделив все ноды с помощью Ctrl+A), но лично я все же не рекомендую это делать, иногда сглаживание проходит не очень выгодно и красиво. Лучше выделять одиночные ноды руками и сглаживать так, чем все сразу. Теперь можно так же удалить копию фейк-стены - она нам больше не нужна. 3. Корректировка сгенерированной Аи-Карты К сожалению, инструмент СДК для работы со сталкером не идеален, и имеет свои ошибки, аи-карта не исключение. Я настоятельно рекомендую, после генерации аи-карты, проверить ее на предмет ошибок. Распространенный тип ошибок и мелких косяков, а так же их исправление, рассмотрим ниже. 3.1. Корректировка 1. Не соединенные ноды Часто бывает, что ноды не соединяются между собой, даже если находятся близко друг к другу. Что на это влияет я так и не понял (Я понимаю, если место стыка находится в трудном месте, на высоте или еще где, а то бывает на ровном месте). Рис. 10 - Не линкованные между собой ноды Как видно из рисунка выше, на краю сетки есть ноды, которые ведут в 1 сторону. Т.е моб попадая на этот нод, не пойдет вдоль например, а развернется назад. Нам конечно это не нужно, по этому начинаем исправлять: 1. Выделяем все Аи-Ноды (Ctrl+A), 2. Затем жмем на среднюю кнопку (+) (К сожалению, ее названия я не знаю, называю ее просто "плюс") (Рис. 11) Рис.11 - Кнопка исправляющая данную ошибку. 3. Смотрим на результат. Рис. 12 - Результат с исправленными нодами Соответственно это исправит такие косяки не только в этом месте, но и в других подобных, возможно которые и не заметишь сразу. 3.2 Корректировка 2. Одиночные ноды Еще одна частая ошибка аи-карты, когда появляются одиночные ноды. Появляться они могут по разным причинам, например во время генерации случайно залезает выше по объекту, и даже коррекция описанная выше не помогает. Я же их расставил специально для примера. В обычном же картостроении, на хорошем большом уровне, их очень часто можно не заметить, опять прибегаем к помощи СДК. Рис. 13 - Одиночные ноды получившиеся после генерации карты Для того, чтобы выделить все одиночные ноды, жмем на Select 0-Link (Находятся справа от кнопки (+) ), данная кнопка выделит все нулевые ноды. Затем жмем Delete на клавиатуре - готово, одиночные ноды удалены. 3.3 Корректировка 3. Лишние ноды (Удаление) Еще один частый глюк СДК, когда аи-сетка произвольно залезает на объекты, которые не должна. Рис. 14 - Аи-сетка на пеньке Как видим с картинки выше, аи-сетка забралась на пенек. Не трудно догадаться, что в игре будет выглядеть не очень красиво, когда НПС или мутант будет бегать по пеньку. В таких случаях, к сожалению, автоматика СДК не поможет - такие места нужно искать самому и исправлять их: 1. Выделяем ноды (Кнопка-стрелочка вверху слева, или горячая кнопка S) Рис. 15 - Выделены лишние ноды 2. Жмем Delete на клавиатуре. 3. Смотрим результат Рис. 16 - Конечный результат, теперь мобы будут обходить пенек 3.4 Корректировка 4. Одиночное (ручное) добавление нодов Порой возникают случаи, когда нужно добавить ноды на уровень. Если аи-сетка создавалась правильно, такие случаи в основном исключены, но никто не от чего не застрахован. Возможно нужно добавить парочку нодов туда, куда СДК автоматически не смог их положить. Я для примера прокладываю "тропинку" к зданию. Чтобы это сделать, нужно опять же находясь в режиме редактирования Аи-Карты (Кнопка Ai Map) нажать на чайник или горячую клавишу А(ф), при условии что все статические объекты до сих пор находятся в снап-листе. Это ограничивает Вас от мороки навроде новой генерации сетки и т.д Рис. 17 - Результат ручного добавления (Новые ноды подсвечены) 3.5 Корректировка 5. Одиночная (ручная) линковка нодов между собой Иногда бывает ситуация, когда ноды не линкованны между собой. Это бывает во многих случаях, например если добавляете некоторые новые ноды вручную, и они не хотят соединяться с основной сеткой. Рис. 18 - Нелинкованные ноды (В моем случае после ручного добавления новых нодов они не соединяются с новой сеткой) Отчетливо видим ошибку. Чтобы мобы смогли зайти в будущем в здание, нужно соединить ноды находящиеся в дверном проеме. Чтобы исправить эту проблему, делаем следующее (Правка похожа на самую первую корректировку): 1. Выделяем ноды, которые нужно соединить между собой Рис. 19 - Выделены необходимые ноды (Подсвечены) 2. Затем жмем на кнопку (+) 3. Смотрим результат Рис. 20 - Результат корректировки 3.6 Корректировка 6. Генерация по определенным объектам Иногда бывают случаи, когда Аи-Карта не генерируется в некоторых местах. Например в зданиях. Благо, это тоже исправляется. Рис. 21 - Внутри здания нет Аи-Сетки Кстати, если все основные работы с основной сеткой были проведены, то для этой корректировки можно и нужно очистить снап-лист, далее мы добавим в него только нужные объекты для генерации. Жмем Commands > Clear List, подтверждаем удаление. Рис. 22 - Очистка снап-листа. Далее вручную выделяем нужные объекты, в моем случае это: дом, мебель. Выделять ВСЕ объекты уровня не нужно! Когда все выделяем, добавляем выделенные объекты с снап-лист, ставим внутрь дома как минимум 1 нод, но я рекомендую (При чем очень настоятельно) расставить по ноду в каждую комнату, чтобы сетка сгенерировалась в каждой комнате, ибо из-за дверных проемов она не всегда пролезает автоматически через него и генерируется в других помещениях. Рис. 23 - Выделены нужные объекты, обновлен снап-лист, добавлены ноды. , выделяем вручную каждый новый нод (Зажав L Ctrl) и жмем Generate Selected (Не Full!) Рис. 24 - Результат выборочной генерации только внутри здания (Основная сетка не была затронута) Теперь, вроде, все ок. Видим правда глюк - на тумбочку залез один нод. Нехорошо. Надо убрать. Как это сделать мы знаем, проходили в 3 корректировке аи-карты. А, хотя стоп, погодите...! Нашел еще один глюк. Как и говорил ранее, аи-сетка иногда может не проходить сквозь дверные проемы и т.п, это мы наблюдаем сейчас. Рис. 25 - Аи-Карта не соединилась из-за узкого прохода Исправить это легко, все из предыдущих корректировок - добавляем в дверной проем по 2 нода (Не забыв нажать Ignore Constraints, как всегда), и тут они либо сами между собой залинкуются, либо выделим их и ближайшие к ним ноды и нажмем на "плюс". Рис. 26 - Исправленная сетка в дверном проеме Вот и все - комнаты соединены между собой. Проделываем эту работу с каждой комнатой и наблюдаем результат. Аи-Карта расстелена по зданию и присоединена к основной сетке, чего не смог сделать СДК. Теперь мобы будут посещать домик. Рис. 27 - Конечный результат 3.7 Корректировка 7. Двигаем "летающие" ноды на место Еще один глюк, который возникает довольно часто - это летающие ноды. Благо это попадается очень редко, почти всегда в лице паре-тройке экземпляров, в основном в зданиях, на объектах, или после ручного добавления нода в узкий проем. Рис. 28 - Летающий нод Нехорошо. Будем исправлять. А то некрасиво как-то будет в игре, если моб попадет на этот нод и резко подлетит вверх, а потом вниз, верно? Выделяем этот нод, затем жмем кнопку отвечающую за перемещение объектов (Вверху на панели инструментов) и как обычный объект двигаем нод вниз по оси Y, и равняем его примерно с остальными. Готово! Рис. 29 - Результат смещения ноды вниз 3.8 Корректировка 8. Неправильная линковка нодов Еще одна редкая, но все же ошибка - когда ноды соединяются между собой по нескольку раз или же на далеких расстояниях, что в игре может вызвать адские глюки и некрасивые моменты. Рис. 30 - Пример такой ошибки Ноды с лестницы соеденились с нодами внизу, которые, в свою очередь, присоединены к основной сетке снизу. О как! Теперь правим: 1. Выделяем все три нода на лестнице, которые соединены к нижним 2. Удаляем 3. Ставим заново поштучно Либо можно не удалять а поставить новые ноды поверх старых, они автоматически перелинкуются в правильную сторону. Такие дела. Рис. 31 - Исправленные ноды, теперь они ведут в правильную сторону Такие ошибки к сожалению могут возникать не только не лестницах, а на различных выступах, ямках, обрывах и т.д - смотрите внимательнее и исправляйте эти недоразумения. 3.9 Корректировка 9. Аи-сетка на вышках и т.д Еще один, не то, чтобы глюк, но недоработка (имхо) аи-сетка не генерируется на вышках, например, вертикальных лестницах и т.д. Все это приходится делать руками. Рис. 32 - Аи-сетка на платформе, которая не соединена с основной сеткой на террейне Чтобы соединить два куска сетки между собой, делаем следующее: 1. Ставим нод снизу лестницы (Должно быть вкл. Ignore Constraints, не забываем), по надобности такой же нод сверху Рис. 33 - Новый нод - будущий мост между двумя кусками 2. Выделяем новый нод, передвигаем его к верху лестницы (Как показано было в ранних корректировках), затем выделяем самый ближний к нему нод и нажимаем на кнопку (+), итог: Рис. 34 - Теперь соединены 2 куска между собой Правда в игре это будет выглядеть не очень хорошо, если НПС или мутант полезет по лестнице, но допускать разъединения сетки нельзя, по этому выбора нет. Так же можно перетащить нод-"мост" на центр лестницы и повернуть его (Через обычный инструмент поворота на панели инструментов): Рис. 35 - Повернутый нод Скорее всего это немного украсит перемещение НПС по лестнице, но на практике не проверял. Ну вот, вроде и все! После всех правок, АИ-сетка должна быть отточена до мелочей, не иметь глюков и ошибок, нпс и мутанты будут бродить везде где положено, ну и прочие хорошие вещи. Кстати, учитывайте: АИ-Сетка не должна иметь разрывов (Например аи-сетка в здании не соединена с аи-сеткой на террейне) - будут вылеты xrAI. Между ними обязательно должен быть хотя бы один нод, соединяющий два куска. Можно билдить аи-сетку, компилировать. 4. Исправление ошибок при компиляции Момент с компиляцией я упущу, пусть это будет описано в статье про подключение уровней. Последним шагом рассмотрим ошибки, которые могут возникнуть, если что-то все-таки проглядели и не исправили. Напомню, что лучше всего будет после сборки аи-сетки проверять ее на наличие ошибок, благо xrAI (Ну или аивраппер) позволяет это делать. Если Вам написали AI-map is valid!, то могу поздравить - Ваша аи-карта готова для дальнейших действий, если же Вам написали ошибку, то: При получении ошибки вида (Скажу честно, другие ошибки мне не попадались, по этому пишу только о ней) Node 13705[-210.000000][36.516769][-151.899963] cannot be reached from the node 794[-255.500000][32.622856][-83.999969] говорит нам о том, что все-таки Аи-Карта не цельная. То есть пропустили место, и на Аи-Карте есть "островок" который отделен от основной Например сетка в домике отделена от сетки на террейне. Надо присоединить. Благо координаты нам пишут, осталось только найти проблемное место и исправить. Я обычно исправляю так: ставлю на карту узкий предмет, типа торчащей вверх палки, трубы, знака, чтобы диаметр(ширина) объекта не превышала размер одного нода. Затем вытягиваю его высоко вверх, чтобы было видно издалека куда он переместился, прописываю ему координаты выданные мне в логе: -255,50; 32.62; -83,9 и жму Enter, объект перемещается на проблемное место. Если на месте, куда переместился объект, не видно ошибок, значит прописываю ему вторые координаты выданные логом: -210; 36.51; -161,8. Нахожу ошибку и удаляю. Так же подобную ошибку могут вызывать такие места, смотрите внимательнее: * Два нода в одном месте * Неправильное линкование нодов (Описывалось ранее в корректировках) Возможное решение генерации АИ-сетки на тяжелых уровнях со сложной геометрией, когда СДК вылетает. (от sneik): Необходимое условие: это наличие полностью готовой локации, уже скомпиленой на максимальном качестве желательно. 1) Разбираем ее в СДК формат конвертером, можно без ключа -with_lods. 2) Запускаем СДК и загружаем уровень, выделяем все объекты и вносим в список аи-мап, ставим нод(ы), отключаем отображение объектов (Скрываем через ПКМ в СДК 0.4 или нажимаем на глазик в 0.7), и пробуем с генерировать сетку в обычном режиме, а вдруг повезет! Если нет, то: 3) закрываем СДК и лезем в папку rawdata\objects\levels\название уровня 4) Открываем папку с кусками геометрии, нажимаем ПКМ и выбираем сортировка по размеру, все "тяжелые" объекты будут первыми по списку 5) Смотрим на первый объект, самый тяжелый, например локация_part0001, запоминаем номер 6) Открываем СДК и опять подгружаем уровень. Находим этот объект и удаляем его. (Желательно объект который удалили перетащить на рабочий стол в отдельную папку, потом они пригодятся и искать будет проще). 7) Опять создаем список для аи мап, но уже в нем не будет одного объекта, того что удалили. Пробуем опять с генерировать. Получилось - отлично! Нет: 8) Удаляем по списку следующий объект и повторяем всю операцию заново, и так до тех пор, пока СДК не сможет с генерировать основную сетку. Дальше делаем все то что описано в уроках этой темы. 9) Все, основная сетка готова, приступаем к изготовлению сетки на объекты которые были удалены. 10) С рабочего стола перетаскиваем папку с объектами которые были удалены, запускаем СДК открываем уровень и выбираем из нашей папки первый по списку объект и ставим его в любое место на локе, нажимаем энтер и выставляем координаты (Местоположение) и ротацию (поворот) на 0, объект встанет на свое место где он и был. 11) Опять делаем по урокам из этой темы, отрезаем под объектом лишние ноды. Выбираем этот объект и в носим его в список аи мап, только его одного, других не надо. Генерируем на этом объекте аи сетку, редактируем ее а потом линкуем с основной сеткой, точки соприкосновения должны быть! Если это здание то соединяем ноды на входе. Для того что бы соединять ноды надо внести в список дополнительный объект, обычно террейн, для этого надо нажать +\-. 12) Когда сетка будет готова для первого объекта его можно удалить, и ставить следующий, повторив выше описанную операцию. И так по списку ставим все объекты и делаем для них сетку. 13) В последний раз проверяем всю сетку, убедившись что все нормально, приступаем к билду. Лезем в вкладку Scene и выставляем максимальное качество. Лезем в вкладку Object потом нажимаем Object List и удаляем все что там есть, то есть все объекты на локации, вплоть до террейна, только надо оставить один объект, какую-нибудь маленькую железяку, кирпич, без разницы. 14) Билдим, естественно на локе должны стоять глоу и лайтс. Компилим как обычный уровень, это займет без геометрии всего несколько секунд, компилим аи-сетку. Все, файл level.ai готов! Кидаем его в паку с уровнем и опять разбираем его, но только теперь уже для спавна, то есть для заселения. Ставим точки графа свой спавн и компилим алл.спавн. Кидаем в геймдату и запускаем, смотрим что натворили! Все! Более подробное представление о организации Аи-Сетки, принципиальных ограничениях (От malandrinus) Ссылка на пост Рекомендации к генерации Аи-Сетки (От CuJIbBEP) Ссылка на пост Альтернатива методу, если автогенерация сетки заканчивается вылетом о нехватки памяти (От h0N0r) Создание нод с зажатой клавишей alt + регулировка их количества с помощью brush size (в свойствах сетки). Напоминает создание ландшафта в редакторе для HoMM Подгонка геометрии в 3d max под аи-ноды Ссылка на пост
  7. Решил создать тему, раз уж на то пошло. Старался изложить всё предельно ясно и подробно (что и как работает), что даже новичок поймёт. https://yadi.sk/i/0SyoTIBPaJKLZ - Часть 1 Справочник тегов https://yadi.sk/i/cQGXA8T5aJKM4 - Часть 2 Вступление https://yadi.sk/i/C9V5y5WoaJKMf - Часть 3 Написание простого диалога https://yadi.sk/i/0Z5XI_kSaJKND - Часть 4 Написание сложного диалога https://yadi.sk/i/UdFaJbbSaJKNn - Часть 5 Совершенствование диалога 1 https://yadi.sk/i/0tOFZObuaJKPM - Часть 6 Совершенствование диалога 2 https://yadi.sk/i/igShiJifaL5YK - Часть 7 Полезные скрипты В спойлере не получилось сделать, проблемы с тегами. Прошу прочитать и сказать стоит ли продолжать дальше.
  8. А теперь мы попытаемся со всей этой фигней взлететь ! (С) Собственно, чтобы заработало без каких-либо переделок все остальное, что я сюда вкладываю. Скрипт большой и толстый, так что этого слона мы будем есть по частям и долго. Тему создал, чтобы болталась мне здесь немым укором, и напоминала.
  9. Роль оффлайн-событий в создании сюжета Часто особенностью какого-либо нового более-менее масштабного мода авторами указывается наличие "абсолютно нового сюжета". Настолько часто, что новый мод без нового сюжета уже и невозможно классифицировать как "новый мод". В этой небольшой статье я позволю себе развить крамольную, на первый взгляд, мысль: создание нового сюжета с нуля - совершенно необязательно и гораздо более трудозатратно, чем переосмысление любого уже имеющегося сюжета, поскольку в любом сюжете уже содержатся практически неограниченные возможности для самореализации автора, и кроются эти возможности в оффлайновых событиях или в событиях, никак не объясненных по ходу сюжета. Для начала имеет смысл пренебречь тем фактом, что видение Зоны у всех разное. Это понятно, но лучше через это просто проехать, потому что иначе рассуждения на тему "правильности" или "неправильности" сюжета теряют смысл. Но нельзя не констатировать, что ноги безрадостного геймплея часто растут из скудного сюжета, а точнее - из невнимательно реализованного. Я лично вижу одну (хотя, конечно, не единственную) важную причину того, что "становится понятно: нет, не то" - слишком многое из сюжета переносится в оффлайн или остается в оффлайне, слишком многое "подразумевается, что произошло", хотя все это можно было бы реализовать и в онлайне или по крайней мере объяснить. Типичный пример - ассортимент торговцев. Возьмем многострадального Сидоровича: масса реализаций его ассортимента, от постоянного наличия до случайного. От чего зависит выбор той или иной схемы? Видение автора, стремление устаканить баланс. Отлично. Реализуется это так: тут пример реализации, простой или сложный, халявный или хардкорный Все. Больше ничего не объясняется. Итог: Сидорович имеет тот или иной ассортимент, и имеет его оффлайном. Но как он его получает? Вот этот момент и пропущен. Если брать оригинальную карту, например, из ТЧ, то становится понятно, что у Сидора всего два варианта получения чего-либо: 1) с блокпоста на юге; 2) от сталкеров (бандитов, военных, неважно) изнутри Зоны. Ну хорошо, три: с вертолета могут сбрасывать. Так вот, сюжетно момент и принципы получения нигде никак не реализованы. В лучшем случае проскочит квест вроде "зачистить местность от мутантов", что теоретически может влиять на бесперебойное пополнение ассортимента. А ведь нива-то богатая для сбора сюжетного урожая. Если брать вариант блокпоста - это и схема поставки (календарь, время суток), это и логистика (ассортимент доставляется руками или транспортом, по дороге или полями), это и экономика (просто так через блокпост ничего не пойдет), это и взаимоотношения группировок (доставка сопряжена с опасностью потери части груза, идет с охраной или без). Наверное, что-то еще, на что фантазии сюжетника хватит. Да-да, я уже слышу, как читающие это начинают говорить "а вот еще можно...". Да можно, конечно. Один оффлайновый факт - ассортимент пополняется - неожиданно мимикрирует в весьма немаленькую главу сюжета. И надо ли объяснять, что сюжет за собой тянет и реализацию, интересную настолько, насколько хватит фантазии и умений уже у реализаторов (скрипты, погода, модели и т.д.)? И это только по Сидоровичу. Откуда берется ассортимент у Бармена - еще более масштабный вопрос, и на первый взгляд - вопрос тупиковый. Понятно, что снабжение, скорее всего, идет от "Долга", но откуда снабжение появилось у них? Этим вопросом так или иначе задавались многие, но, поскольку качественную схему продумать сложно, авторы либо просто не обращают внимание на этот момент, либо находят простой выход: урезают этот ассортимент, что, хотя и выглядит логично, но показывает, что автору было просто лень думать над этим. Свалка брошенной техники, бои за которую ведутся между мутантами, сталкерами, военными и бандитами. От чего зависит присутствие той или иной группы там в тот или иной момент? Мы знаем, как это определяется автором (жестко или рандомно), но почему именно жестко или именно рандомно? В некоторых модах авторы, если считают нужным, поясняют это (в диалогах, например), а в некоторых - нет. Момент, казалось бы, незначительный: ну какая разница, кто там сейчас и почему, если это никак не привязано к сюжету? Это просто деталь, которая присутствует из необходимости кем-то заселить пустующее место. И нам все равно, кто там сейчас, в момент нашего захода туда, разница лишь в том, что мы будем воевать (если присутствующие там являются в данный момент врагами ГГ) или не будем воевать, если там друзья или если мы просто проходим мимо. Эта местность живет своей жизнью вне зависимости от того, идем мы туда или нет, и, если автор никак не увязывает события на ней с сюжетом, что бывает часто, то фактически мы получаем часть Зоны (причем не пустующую, со своими объектами, населением и какой-то предысторией!), начисто вычеркнутую из сюжета. Вопросов по этой части Зоны можно задать невероятное множество, и ответы на них рождают для сюжетника еще одну плодородную ниву. Возьмем модификацию артефактов. Мы знаем, что информацию о том, как и что модифицировать, нам с барского плеча кидает квестодатель в награду за выполнение квеста. Ну, это к примеру, реализации получения этой информации тоже могут быть разными. Откуда это ему стало известно? Если есть информация (и методика), что редкий и ценный артефакт можно модифицировать в еще более редкий и ценный, то как она была получена тем, кто ее распространяет? Если это сталкер, у которого была условная "Ночная звезда", редкая и недешевая, так он что - ходил и метал ее во все аномалии подряд в надежде, что авось, выгорит? Да, есть истории о том, как случайно артефакт попал в аномалию, из этого случайно появился модификат, и так далее. Но разве такую информацию можно поставить на системный поток? Это случай, и редчайший. Есть еще ученые. Которые экспериментируют (как? с какой целью? в каких условиях? по какой методике? какими ресурсами?) над артефактами и получают модификаты. Информация о процессе и результатах доходит до нас в виде факта и зачастую через десятые руки. Условный Толик на Кордоне за условную куртку говорит нам, что "если то-то бросить туда-то, получится это. Инфа от очкариков!". Как эта информация распространяется от очкариков? Для чего им эту информацию распространять? В награду за оказанную каким-то персонажем услугу. Если они дают эту инфу напрямую ГГ за квест, тут все понятно. В остальных случаях история просто теряется. Мы знаем только, что как-то эта информация попала от ученых к Толику. Через десятые руки? Наверняка. Через какие? Нас это не заботит. А может, напрямую? Да тоже неважно, информация просто есть, нам этого хватает и мы ее используем в своих целях... Но стоп! Вот тут опять возникает пропуск, опять что-то довольно интересное с точки зрения сюжета произошло в оффлайне. В оригинале ТЧ аномалии были фиксированные. Потом их сделали динамическими. Потом ими научились немного управлять (с помощью артефактов, доброго слова, доброго слова и пистолета, и т.п.). Все? Максимум, что можно выжать из сюжета - это то, что "Рубиновая батарейка" ликвидирует аномалию? Но почему она ликвидируется? Как возникают аномалии? Почему Стрелок, разгадавший аж саму тайну Зоны, совершенно не в курсе, отчего появляются аномалии и почему они функционируют именно так? Он знает, что "Электра" бьет током, а "Карусель" крутит и плющит. Знает. По собственному опыту или из ПДА. Все. Как аномалии возникли? Зона их сделала? А почему Стрелок в этом уверен? Сахаров ему так сказал? А может, это именно Сахаров-то и рулит аномалиями из бункера? Может быть, история "О-Сознания" - это очередная сказочка, а реально-то за всем стоят именно очкарики с Янтаря? Может, и нет никакого "О-Сознания"?.. Может... Как видите, развить очень легко, и дело тут во многом - в фантазии конкретного автора. Главное в таком подходе - не принимать оффлайновые события за что-то обязательное, не подлежащее рассмотрению, и это мгновенно создает цепочку "Общий сюжет" -> "Сюжетные линии" -> "Квесты". Но легко и "распылиться" в фантазиях. Построенный на таком подходе сюжет, безусловно, должен быть продуман и неукоснительно соблюден в реализации, во всяком случае, до этапа написания конкретных квестов и, разумеется, насколько это вообще возможно, ибо реализация сюжета может быть затруднительна имеющимися средствами игры, поэтому полет фантазии в какой-то мере нужно держать в узде, и просто возвращаться к тому, что даже в оригинальном сюжете в оффлайн вынесено очень многое, и это можно использовать даже не сильно увлекаясь чем-то одним. Закругляясь и суммируя, вернемся к Сидоровичу (но он здесь просто пример - ну кого-то же надо взять для примера!). Я рассмотрел три варианта пополнения его ассортимента: блокпост, изнутри, сброс с вертолета. Но горе тому сюжетнику, который решил развить в сюжете этот момент и при этом со мной согласен в количестве вариантов пополнения ассортимента. Я не привел еще несколько вариантов, и приводить их не намерен - для того, чтобы было ясно, что нет таких оффлайновых событий, которые были бы ограничены каким-либо количеством вариантов развития. Сюжет, который вы пишете - ваш сюжет, и только вы можете придумать и определить его развитие в целом и в частностях. Я намеренно взял три ближайших к началу игры локации из оригинала ТЧ. Дело в том, что оффлайновая событийность на локациях, близких к центру Зоны, на мой взгляд, намного выше. И простые, лежащие на поверхности, примеры на Кордоне, Свалке и в Баре должны просто дать понимание того, что богатство потенциального сюжета может быть обеспечено уже на начальном этапе игры. Разумеется, трудно спорить с тем, что рано или поздно вся без исключения событийность - оффлайновая ли, онлайновая - сведется к квесту вида "найди-принеси-убей". Думаю, не стоит этим разочаровываться, поскольку от этого уйти совсем вряд ли возможно. Этот факт нужно принять и сосредоточиться на главном: разработка совершенно нового сюжета (что может затруднить строительство мода вообще, как на начальном этапе, так и на последующих, когда идет реализация) вовсе необязательна, поскольку может быть достаточно всего лишь развить оффлайновые моменты уже существующего сюжета. При известной доле фантазии каждый (!) вопрос из этой статьи потянет за собой сюжетное ответвление, а то и несколько, плюс кучу квестов, венчающих сюжетные линии, и это как раз то, что порождает и в большой степени определяет тот самый геймплей, к интересности и непредсказуемости которого многие стремятся.
  10. Повешу это здесь сразу, чтобы иметь перед глазами постоянное напоминание. Как я это представляю, кроме введения и обсуждений в формате "все ни о чем": Создается паралельно более специализированная тема, типа "динамическое подключение функций" (это если вопрос достаточно синкретичен), или "нетпакеты", или "таймеры", или вот прямо конкретно "_g.script". А здесь черкается заметочка. "Все ни о чем" обсуждаем прямо здесь.
  11. Что же, рискну создать первую тему в данном разделе... Надеюсь с ней не ошибся по характеру вопроса, если ошибся, то поправьте. Задался следующим вопросом, какие шейдеры можно назначить статическому объекту, что бы он полноценно отображал градиент текстуры с альфа-каналом, но при этом имел бамп и текстуру деталей? Примеры: С def_aref_v объект имеет и детали и бамп, но совершенно отсутствует градиент альфа-канала. С def_trans_v получился нужный результат, но отсутствуют детали и бамп, да и сам объект становится слегка прозрачным и через него виден sky-куб. Есть ли возможность обойти такое ограничение? Целью задумки является улучшение визуальной составляющей локаций, плавных переходов "объект-террейн", "объект-объект", "террейн-террейн" без лишнего нагромождения полигонов. Так-же экономятся RGB-каналы, которые можно использовать.
  12. Это, разумеется, читать и использовать все равно ни кто не будет, но поскольку однотипные вопросы, задаваемые неизвестным телепатам, слегка поддостали, хоть душу отведу. Исторически сложилось, что разные события, случающиеся с актором, обрабатываются в bind_stalker скрипт. Опять же, исторически, в нем есть несколько коллбэков, отвечающих за получение и потерю предметов: function actor_binder:take_item_from_box( box, item ) function actor_binder:on_trade( item, sell_bye, money ) function actor_binder:on_item_take( item ) function actor_binder:on_item_drop( item ) function actor_binder:on_use_object( item ) По-идее, на этом статью можно было бы и закончить, поскольку все вполне прозрачно из названий функций, но для тех, кому лень смотреть скрипты, добавлю, что ставятся они вот как-то так: function actor_binder:reinit() log( "info", "reinit" ) object_binder.reinit( self ) pstor = {} st = { ["pstor"] = pstor } self.st = st db.storage[0] = st self.next_restrictors_update_time = -10000 actor:set_callback( callback.inventory_info, self.info_callback, self ) actor:set_callback( callback.article_info, self.article_callback, self ) actor:set_callback( callback.on_item_take, self.on_item_take, self ) actor:set_callback( callback.on_item_drop, self.on_item_drop, self ) actor:set_callback( callback.trade_sell_buy_item,self.on_trade, self ) actor:set_callback( callback.task_state, self.task_callback, self ) actor:set_callback( callback.level_border_enter,self.level_border_enter,self ) actor:set_callback( callback.level_border_exit, self.level_border_exit, self ) actor:set_callback( callback.take_item_from_box,self.take_item_from_box,self ) actor:set_callback( callback.use_object, self.on_use_object, self ) actor:set_callback( callback.death, self.death_callback, self ) log( "info", "reinit, done" ) end здесь и далее приводимые куски кода пали жертвой рефакторинга, и у вас это может быть иначе. Снимаются колбэки так: function actor_binder:net_destroy() local log_level = smart_terrain.get_log_level() or 100 if log_level < 20 and log_level >= 2 then smart_terrain.disable_log() if se_stalker.disable_log then se_stalker.disable_log() end if se_monster.disable_log then se_monster.disable_log() end xr_gulag.disable_log() end local remove_from_ranking = actor_stats.remove_from_ranking if remove_from_ranking then remove_from_ranking( 0 ) end sr_light.clean_up() actor:set_callback( callback.inventory_info ) -- чистим колл-бэки ( устанавливаются в nil ) actor:set_callback( callback.article_info ) actor:set_callback( callback.on_item_take ) actor:set_callback( callback.on_item_drop ) actor:set_callback( callback.trade_sell_buy_item ) actor:set_callback( callback.task_state ) actor:set_callback( callback.level_border_enter ) actor:set_callback( callback.level_border_exit ) actor:set_callback( callback.take_item_from_box ) actor:set_callback( callback.use_object ) actor:set_callback( callback.death ) if psy_antenna then psy_antenna:destroy() sr_psy_antenna.psy_antenna = false end xr_sound.stop_all_sound_object() db.del_actor( actor ) _G.actor = nil object_binder.net_destroy( self ) end - надо это, чтобы итра не вылетала при уничтожении объекта (в данном случае - при завершении/перезагрузке). Далее будет в порядке графомании расписано, что с этими коллбэками вообще можно делать, а заодно - как их стоило бы переписать для вящего удобства и чтобы перестать уже насиловать процессор. Да, в случае очистки коллбэков магическое nil, типа actor:set_callback( callback.article_info, nil ) - вроде, не требуется. По крайней мере я ни каких негативных эффектов пока не увидел. Но, возможно, ошибаюсь, и эффекты просто пока не вылезли. А вообще за код вида "== nil" и "~= nil" надо давать сразу 35 лет строгого расстрела. Вот чтоб каждое утро в 6 часов не взирая на погоду выводили, и расстреливали. Почему здесь везде actor а не db.actor ? По тому что код пал жертвой рефакторинга, и актор опрделяется раз и навсегда в глобальном пространстве: function actor_binder:__init( npc ) super( npc ) _G.actor = self.object db.add_actor( actor ) self.is_saved = false end

AMK-Team.ru

×
×
  • Создать...