У меня давно назревает один вопрос. Он смутно замаячил, когда Доктор ещё показывал своих пациентов охотнее, чем сейчас. Потом он стал приподыматься, когда я делал дяде Мише chm-ники. А после вот этого свежего тутора он наконец сорвался.
Почему в этих ваших энтитях этих ваших хаммеров значения полей всегда константы? Возьмём любой приличный пакет анимации (тоже как-никак приложение с интерактивной сценой) — мы там имеем возможность задать произвольное выражение или функцию в качестве параметра. В том числе такое, которое добывает значения других параметров в сцене и как-то их использует. Для анимации это незаменимо: можно хвостом шевелить с задержкой от сегмента к сегменту для плавненькой инерции, можно одежду шевелить только при положительном/отрицательном вращении кости, можно переключалку IK/FK запилить. Да вы с выражениями вообще тсарь и бох.
Так нет же, вместо одной чахлой линейной функции у нас в хаммере будет десяток энтитей. Почему это так спроектировано? Никто не подумал, что может быть иначе? Было бы неэффективно? Ограничения графа сцены? Трудности с выбором языка?
И во всех ли игровых движках такая картина?
Отправлено Government-Man 23-03-2013 в 00:06:
UnrealEd поддерживает математические выражения.
Отправлено XaeroX 23-03-2013 в 03:37:
Потому что это не нужно.
Не могу представить ситуацию, когда вместо таргетнейма двери в триггере надо прописать его синус.
В старом HLFX можно было прописывать произвольный код на луа в разные энтити, но использовалось это в основном для экономии мульти-менеджеров, когда одна луа-функция вызывала кучу файртаргетс с задержками. Больше ни для чего это использовать не додумались. Не верите - спросите Жэку.
Ну во первых, 99% мапперов не могут освоить что-либо сложнее двери, открываемой кнопкой. А, те, которые могут, такие звери, что им даже оружия не дают, прямо как в стройбате. Вон, поглядите что творил Richman в своём моде Hazardous Course на оригинальных халфовских дллках.
А теперь - к самому главному. Там не нужны линейные выражения, не нужны функции, все скриптовые секвенции это условия и задержки.
Добавлено 23-03-2013 в 19:12:
thambs
Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.
Отправлено nemyax 23-03-2013 в 18:49:
Дядя Миша
А разве плохо было бы иметь возможность функцией менять радиус или цвет лайтов, или на лету подменять мастера? Ну не плохо же, согласиська.
Отправлено Дядя Миша 23-03-2013 в 19:12:
Радиус лайтов менять нельзя, поскольку это как бы предрасчитанный свет, запеченный в лайтмапу. Цвет лайтов менять, не то чтобы не нужно, но достаточно иметь два источника и переключать их. Это даже удобнее.
Ну а уж зачем на лету подменять мастера я и вовсе не знаю.
Наш Доктор между прочим сделал на ксаше настоящий калькулятор:
и ЧСХ - безо всяких там выражений.
Отправлено nemyax 23-03-2013 в 20:12:
Цитата:
Дядя Миша писал: достаточно иметь два источника и переключать их
А плавно?
Цитата:
Дядя Миша писал: Наш Доктор между прочим сделал на ксаше настоящий калькулятор:
и ЧСХ - безо всяких там выражений.
А древнегреки и вовсе сценические тележки в своих амфитеатрах программировали верёвками да колышками. Ты так об этом говоришь, как будто он это от хорошей жизни.
Отправлено Дядя Миша 23-03-2013 в 20:19:
Я ввёл в ксаш-мод систему префиксов и постфиксов, тебе как документатору это отлично известно. На данный момент возможностей этой системы вполне хватает, чтобы делать даже калькуляторы.
Понадобятся выражения - введем выражения. Но это вряд ли.
Отправлено XaeroX 24-03-2013 в 02:53:
А я считаю, что калькуляторы надо делать на виртуальной машинке.
И нефиг ерундой страдать.
>> А я считаю, что калькуляторы надо делать на виртуальной машинке.
Ты всерьёз веришь что кто то бросится изучать кастомную ВМ?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено nemyax 24-03-2013 в 09:01:
FiEctro
Ну изучают же всякий шыт вроде MaxScript-а и MEL-а.
Отправлено Ku2zoff 24-03-2013 в 10:27:
nemyax не надо путать скриптовые языки для автоматизации рутинных задач в пакетах 3Д моделирования с виртуальной машинкой для мода к игре 15-тилетней давности. Первое изучают пользователи макса и майи, чтобы облегчить свою работу. Второе даже не нужно изучать, если ты уже занимался кодингом под хл или кваку. И маппер всё равно не будет изучать эту ВМ. Что в ней такого, что делает её проще по сравнению с кодом дллок как, например велосипед проще мотоцикла?
Отправлено XaeroX 24-03-2013 в 12:36:
Цитата:
FiEctro писал: Ты всерьёз веришь что кто то бросится изучать кастомную ВМ?
Верю. Там очень похоже на обычный хл.
Только проще.
Если не затруднит, приведи пример FireBulletsPlayer из ВМ. Мне интересно, насколько это проще, потому что мапперы в большинстве своём хотят нечто вроде "Press "E" to make custom entity". А я уверен, что кодинг в ВМ будет не настолько элементарным.
Отправлено XaeroX 24-03-2013 в 14:11:
Цитата:
Ku2zoff писал: Если не затруднит, приведи пример FireBulletsPlayer из ВМ.
Этого пока нет, но могу привести в пример код env_spark.
Проще тут то, что а) нет поганых классов, б) не надо думать о сейвресторе (у svEntity_t есть массив persistant, который сохраняется, и local, который не сохраняется), в) можно гибко настраивать любые функции по указателям (хотя в сейв, как и в халфе, пишутся только Think, Touch, Blocked и Use).
Эта энтитя, misc_sparks, как раз и написана мной в качестве демонстрации.
Потом будут ещё демо-монстр и демо-оружие.
А дальнейшее расширение возможностей виртуальной машинки (там много куда расшириться можно) отложим до HLFX 0.8 beta.
Добавлено 24-03-2013 в 21:11:
Цитата:
Ku2zoff писал: потому что мапперы в большинстве своём хотят нечто вроде "Press "E" to make custom entity"
Для работы с выражениями достаточно освоить простенький триггер: на входе энтитя1 и энтитя2, на выходе суперпозиция каких-либо их параметров.
В принципе, заготовку такой энтити я тоже могу сделать в качестве демонстрации.
Будет немного непривычно, хотя если кто-то кодил под вторую и третью кваку освоятся быстрее. Насчёт удобности не знаю, насчёт сложности - да, это проще.
Цитата:
XaeroX писал: б) не надо думать о сейвресторе
Хм, ну это тоже полезно. Мне интересно, почему валвэ в дллках сделали именно выборочное сохранение каких-либо переменных и параметров в сейв. Чтобы сэкономить память и уменьшить время загрузки/сохранения?
Цитата:
XaeroX писал: в) можно гибко настраивать любые функции по указателям
С этим у меня туговато т.к. не очень силён в C как таковом, но примерно представляю. В коде дллок бывает иногда довольно проблематично "выцепить" какую-либо функцию для своих нужд. Бесит работа с CBasePlayerItem вместо CBasePlayerWeapon, например.
Отправлено XaeroX 24-03-2013 в 14:42:
Цитата:
Ku2zoff писал: Мне интересно, почему валвэ в дллках сделали именно выборочное сохранение каких-либо переменных и параметров в сейв. Чтобы сэкономить память и уменьшить время загрузки/сохранения?
Экономия памяти, да.
Массив одного размера на все энтити - это удобно, но многие энтити не юзают все поля, и размер сейва вырастает. В этом примере с искрами юзается один-единственный флоат из всего persistant. Возможно, позже я предусмотрю в ВМ возможность выборочной записи персистантов в сейв, но пока пишется массив целиком.
Цитата:
Ku2zoff писал: В коде дллок бывает иногда довольно проблематично "выцепить" какую-либо функцию для своих нужд.
В этом и заключается главный минус классов - ходьба по иерархии, пока не поймёшь, какая именно виртуальная функция вызывается. А здесь - ты заполняешь vtbl вручную и имеешь чёткое понимание, что, когда и как. Ну и наследование в каком-то виде можно через этот vtbl реализовать.
Добавлено 24-03-2013 в 21:42:
Цитата:
Ku2zoff писал: Будет немного непривычно
Да ты присмотрись...
В халфе ты писал:
C++ Source Code:
void CMiscSparks::SparkThink( void )
а тут будешь писать:
C++ Source Code:
void CMiscSparks_SparkThink( svEntity_t *self )
Разве большое отличие?
Ну и self-> надо везде писать, но и в халфе можно писать this->, просто там это опционально, а тут - обязательно.
Есть ещё кое-какие отличия в движковых функциях, в основном связанные с тем, что ВМ безопасна (в частности, не имеет доступа ни к каким указателям за пределами своего внутреннего адресного пространства), но это тонкости, которые коснутся далеко не всех.
А не слишком ли это, не утруждать товарищей заботой о сейв-ресторе? Ну в самом деле, вдруг у них потом возникнет необходимость кодить по-обычному, и начнутся проблемы типа "с моего пистолета пропадает глушитель" или "а почему после загрузки у игрока стамина 100%"?
Добавлено 24-03-2013 в 21:44:
Цитата:
XaeroX писал: ВМ безопасна (в частности, не имеет доступа ни к каким указателям за пределами своего внутреннего адресного пространства)
Ну хоть крэшиться ничего не будет Отправлено XaeroX 24-03-2013 в 14:45:
Цитата:
Ku2zoff писал: А не слишком ли это, не утруждать товарищей заботой о сейв-ресторе? Ну в самом деле, вдруг у них потом возникнет необходимость кодить по-обычному, и начнутся проблемы типа "с моего пистолета пропадает глушитель" или "а почему после загрузки у игрока стамина 100%"?
Зачем человеку, который однажды перешёл на HLFX в целом и его ВМ в частности, начинать кодить "по-обычному"? HLFX - его надёжный товарищ, который берёт на себя большую часть забот. Конечно, возможности ВМ не безграничны и, вероятно, кому-то их не хватит - но этот кто-то, вероятно, и сам хлфх свой написать сможет, логично?
XaeroX писал: и, вероятно, кому-то их не хватит - но этот кто-то, вероятно, и сам хлфх свой написать сможет, логично?
Встречаются особые индивидуумы, которые эта, попробуют что-то, а потом хотят упереть код из этого чего-то в что-то другое или наоборот. Как быть с такими?
Отправлено XaeroX 24-03-2013 в 14:50:
Цитата:
Ku2zoff писал: Ну хоть крэшиться ничего не будет
Ну почему же не будет? Внутри адресного пространства можно натворить всякого. Но это особенность языка Си, иначе никак. Хотите арифметику указателей и все связанные с ней бонусы - получайте и потенциальную возможность креша.
А вот взломать OpenGL из-под DirectX с помощью GDI в ВМ действительно будет невозможно. Или, скажем, написать эксплоит с переполнением какого-нибудь движкового буфера.
Добавлено 24-03-2013 в 21:50:
Цитата:
Ku2zoff писал: а потом хотят упереть код из этого чего-то в что-то другое или наоборот. Как быть с такими?
Им всё равно придётся думать о сейве. В частности, решать, где хранить переменную - в персистанте или в локале. Эдакое концептуальное решение. А при переводе кода на халфу просто надо будет записать в сейв всё, что хранил в персистанте в ВМ. Не так уж сложно.
XaeroX
Примеры это очень хорошо. Такие вещи как позиция элементов худа, отключение старых пушек и монстров (для мода с полностью кастомными пушками и монстрами) - машинка может прожевать?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 24-03-2013 в 15:01:
Цитата:
FiEctro писал: отключение старых пушек
Так-то это не нужно, главное не давать игроку эти пушки. Разве что для экономии памяти.
Цитата:
FiEctro писал: Такие вещи как позиция элементов худа
Худ же целиком весь будет в машинке, какие примеры? Меняй не хочу. Другое дело, если автор мода захочет прикрутить что-нибудь особое, например ВГУИ-менюшки для каких-л. нужд.
Добавлено 24-03-2013 в 22:01:
XaeroX а как насчёт модельрендерера? Я понимаю, что целиком его вытаскивать в ВМ - занятие неблагодарное, но будет ли возможность аттачить произвольные модели к игроку/монстрам и прочему посредством StudioMergeBones? И возможность выбора 2-way\9-way блендинга для особо упоротых, желающих сделать клон КаЭс?
Отправлено FiEctro 24-03-2013 в 15:02:
>> Так-то это не нужно, главное не давать игроку эти пушки.
Хотя бы из импульс 101 вычеркнуть.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 24-03-2013 в 15:06:
Цитата:
FiEctro писал: Хотя бы из импульс 101 вычеркнуть.
Это ж читерская команда, если хотят играть нормально - не используют её. Вон, в опфоре все халфовские стволы на месте, ничего не вырезано. ЕМНИП, не все из них можно получить в игре.
Отправлено XaeroX 24-03-2013 в 15:25:
Цитата:
FiEctro писал: Такие вещи как позиция элементов худа
Я собираюсь весь худ вынести в клиентскую ВМ.
Цитата:
FiEctro писал: отключение старых пушек и монстров
Зачем отключать, если можно просто не ставить эти энтити на карту, как правильно написал Ku2zoff?
Цитата:
Ku2zoff писал: например ВГУИ-менюшки
С вгуи я ещё не придумал и в версии 0.7 вряд ли буду заморачиваться, но вообще - можно и поддержку вгуи в машинке сделать подобно серверным псевдоклассам.
Цитата:
Ku2zoff писал: а как насчёт модельрендерера?
У хлфх свой как бы.
Цитата:
Ku2zoff писал: И возможность выбора 2-way\9-way блендинга для особо упоротых, желающих сделать клон КаЭс?
Проще добавить этот 9-вей в хлфх. Да хотя бы из волатилы скопипастить.
Цитата:
FiEctro писал: Хотя бы из импульс 101 вычеркнуть.
Импульс 101 можно в ВМ перенести, это не проблема.
XaeroX писал: А вот взломать OpenGL из-под DirectX с помощью GDI в ВМ действительно будет невозможно. Или, скажем, написать эксплоит с переполнением какого-нибудь движкового буфера.
Много ли существует зловредных модов, переполняющих движковые буферы и взламывающих графические АПИ? Отправлено XaeroX 25-03-2013 в 03:52:
Цитата:
Government-Man писал: Много ли существует зловредных модов, переполняющих движковые буферы
Не знаю, я не читер. Но теоретически - их существует неограниченное количество.
Да уж наверное найдётся какой-нибудь нубский мод, портящий память. А про утечки я вообще молчу. Хвалёный Сру от Страха отжирал больше гигабайта оперативки, может быть уже исправили с каким-нибудь патчем.
Вообще, с моей точки зрения, вещи подобного плана интересуют авторов трейнеров, кряков и самих разработчиков (которым важно перед релизом исправить все возможные ошибки). Искренне не понимаю интерес школоло к этому. Почему-то они всегда хотят что-то взломать, начитерить, поиздеваться над другими игроками. Я сам пользуюсь трейнерами или читами только в очень запущенных случаях, когда разрабы игры - фимозники в тяжёлой стадии, или игра рассчитана на полных задротов.