Это типа, чтобы движку легче было производить расчёты? Чтобы по графикам функции обратной вычисляла? Чтобы игра не вылетала от информации, которую нельзя или просто сложно обработать без такой програмки ? / Слушайте, как они эту игру делали... Как бедный Шторм такое ест? Может не он виноват вообще, что игра довольно часто вылетает и глючит?
Idler99, это сделано исключительно для расчетов функций, и только потому, что внутри двига (в ГПК, К3, ПКМ) этих функций нет например, в ККС курсовой угол рассчитывается с использованием функции acos и для того, чтобы перенести код из ККС на ГПК нужно использовать эту функцию всего-то Что толку, если не можешь сделать мир лучше.
При чём тут это? Любая компьютерная игра (даже самая простецкая) строится на математике. Или вы не знаете, что пули, выпущенные из ружья или пулемёта, тоже летят по кривой? А как вы эту кривую ЭВМ объясните? Это вы знаете, что синусоида кривая, а компьютер этого не знает! Вот и нужно описывать всё функциями. Я уж не говорю об играх серии "Корсары", где все процессы описываются функциями в 2D и 3D пространстве. Полёт снарядов, движение кораблей, даже смена дня и ночи, атмосферные явления...
И да... Если лично вам эта тема неинтересна - не проявляйте неуважение к другим, не читайте. Мне бы, в своё время, эти описанные выше функции оказались очень полезными! Но т.к. я сам по образованию компьютерщик, изучал высшую математику в институте, то написал сам. Это не проблема. Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Nathaniel, я думаю, ты немного не так понял Джин-Бейн'а, он скорее всего имел ввиду, что не обязательно в школе хорошо знать алгебру, геометрию, чтобы понимать какие-то геометрические функции и правила, это можно и самостоятельно догнать и изучить. Ну и изначально его вопрос, был скорей - "для чего и как применить это(запрограммированные функции) можно". Единственное, что можно сказать об удаче с уверенностью — она изменит. --------
Ладно, проехали... Да и наспамили мы тут... Прошу модератора раздела потереть весь мой флуд! Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Мне бы, в своё время, эти описанные выше функции оказались очень полезными!
Nathaniel, согласен с вами. Я тоже программист, но когда впервые увидел программный код Корсаров, не сообразил, что к чему. И именно уроки на этом сайте, как и народ, который делился своими идеями, помогли мне в освоении мододеланья, если можно так выразится. Со временем даже сам стал выкладывать разные мысли, по разным изменениям игры. Так же, выражаю благодарность всем тем, кто нашел время и приложил усилия, развивая этот раздел, объясняя и помогая разобраться, что к чему.
Но т.к. я сам по образованию компьютерщик, изучал высшую математику в институте
Вы наверняка знакомы с Асмой
К сожалению нас ,,покинули,, unk1024, который обещал новый ,,Storm,, написать.
Бегемот, который упростил движок до 300кб.
Отсюда вопрос к знатокам: Поскольку в storm,е как бы два движка -как добавить третий !!!
,,Сидит ГГ в таверне, выпил зелья индейца - и заработали функции из storm v2.7 на движке storm v2.8 или другие варианты. Ведь нам современный storm v3.0 не светит.
чтобы ваять шейдеры для Шторма хватит и одних знаний HLSL в DX9 SDK есть утилита которая преобразует код в asm
Цитатаsamovar ()
Сидит ГГ в таверне, выпил зелья индейца - и заработали функции из storm v2.7 на движке storm v2.8 или другие варианты. Ведь нам современный storm v3.0 не светит.
Прошу, не надо кричать, что это невозможно!
невозможно
почему? а потому что в 2.8 порезали всякие фишки из 2.7 и 2.6 версий тот же КСМ возьмем примером - там динамическое освещения есть, опять же смена освещения на глоб. карте, картинка более "мягкая" без включенных пост-эффектов и да, набор движковых месседжей, которых нет в ГПК. это те же бортовые залпы в локациях, работа с камерой (радиус камеры, камера направлена из точки в точку (в 2.8 только из точки на перса и никак иначе), и еще много нюансов, которые с ходу и не вспомню) так что самые вкусные плюшки КСМовского двигла на ГПК не пашут только если дописывать двигло ручками, имея исходники, поэтому невозможно! Что толку, если не можешь сделать мир лучше.
Если это вопрос ко мне, то отвечу кратко... Нет, я практически не освоил его, так что перекраивать движок с его помощью не имею возможности... Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
так что перекраивать движок с его помощью не имею возможности...
так и сильно не перекроишь разве что уже готовые шейдеры можно новые написать, но по больше части шейдеры подключатся через двиг через скрипты юзают только техники без шейдеров все шейдерные дефайны в двиге зашиты Что толку, если не можешь сделать мир лучше.
Сегодня меня спросили о том, как же сделать в мод-паке или в К:КС так, чтобы на верфи корабли продавались с орудиями, а не без них? Так вот, всем тем, кому интересен этот вопрос, публикую решение...
Итак, откройте файл ShipsUtilites.c в каталоге \scripts\ и найдите внутри FillShipParamShipyard() - процедуру, с которой и придётся поработать...
Вот и всё... Теперь сохраняйте файл, загружайте игру и вновь обращайтесь к начальнику верфи. Новая игра не требуется... Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
И ещё один урок специально для тех, кто любит менять внешний вид кораблей в игре... Как известно, движок игры "видит" только три набора текстур для корабля в \resource\textures\ships, но и этого будет достаточно, например, чтобы поменять внешний вид своего любимого квестового корабля, не занимаясь заменой текстур вручную. Ведь обычно текстуры квестовых кораблей во всех трёх папках (hull1, hull2, hull3) выглядят абсолютно одинаково...
Итак... Вам понадобится, к примеру, общий диалог верфистов: Common_Shipyard.c. Открываем его и где-нибудь в верхней части вписываем...
Код
if (RealShips[sti(Pchar.Ship.Type)].BaseType == SHIP_QUEST) { if (RealShips[sti(Pchar.Ship.Type)].ship.upgrades.hull == 1) { link.l1 = "У меня к вам несколько необычная просьба, " + GetAddress_Form(npchar) + ". Это касается внешнего вида моего корабля..."; link.l1.go = "Ship_Unique_Upgrade"; link.l2 = "Нет, спасибо. Я ошибся..."; link.l2.go = "exit"; }
if (RealShips[sti(Pchar.Ship.Type)].ship.upgrades.hull == 3) { link.l1 = "Я бы хотел сменить внешний вид корпуса своего корабля."; link.l1.go = "Ship_Unique_Return"; link.l2 = "Нет, спасибо. Я ошибся..."; link.l2.go = "exit"; } }
В качестве SHIP_QUEST обязательно подставляете любой интересующий вас квестовый корабль. Например, SHIP_FLYINGDUTCHMAN, SHIP_BLACKPEARL или любой другой, от которого вы в полном восторге в игре и который вы, возможно, добавляли в игру самостоятельно!
Значение атрибута ship.upgrades.hull указывает вам текущий номер папки с текстурами для данного корабля: 1 - hull1; 2 - hull2; 3 - hull3; Больше ставить нет смысла, т.к. распознаются только три папки.
Затем в этом же файле где-нибудь ниже пишем...
Код
case "Ship_Unique_Upgrade": dialog.text = "Очень интересно... Продолжайте, " + GetAddress_Form(npchar) + "!"; link.l1 = "Я бы хотел сделать с корпусом нечто подобное."; link.l1.go = "Ship_Unique_Upgrade_1"; break;
case "Ship_Unique_Upgrade_1": dialog.text = "Гм!.. Позвольте поинтересоваться, каким же образом?"; link.l1 = "Сможете сделать это?"; link.l1.go = "Ship_Unique_Upgrade_2"; break;
case "Ship_Unique_Upgrade_2": dialog.text = ""; // тут можно написать про тяжёлую жизнь верфиста link.l1 = "Превосходно! В таком случае поговорим о вашем гонораре за работу."; link.l1.go = "Ship_Unique_Upgrade_3"; break;
case "Ship_Unique_Upgrade_3": dialog.text = "Отлично, я приступаю к работе!"; link.l1 = ""; link.l1.go = "Ship_Unique_Upgrade_4"; break;
case "Ship_Unique_Upgrade_4": DialogExit(); RealShips[sti(Pchar.Ship.Type)].ship.upgrades.hull = 3;
// антураж (можно ещё прикрутить промотку времени и спецэффекты Log_Info("Заказ принят и выполнен!"); PlayStereoSound("interface\notebook.wav"); PlayStereoSound("interface\notebook.wav"); NextDiag.TempNode = "Meeting"; break;
case "Ship_Unique_Return": dialog.text = "Очень интересно... Продолжайте, " + GetAddress_Form(npchar) + "!"; link.l1 = "Я бы хотел восстановить прежний внешний вид корпуса своего корабля."; link.l1.go = "Ship_Unique_Return_1"; break;
// тут пишем какой угодно развесёлый диалог для антуража // можно вписать условие оплаты гонорара за работу на верфи или что-попало
case "Ship_Unique_Return_4": DialogExit(); RealShips[sti(Pchar.Ship.Type)].ship.upgrades.hull = 1;
// антураж Log_Info("Заказ принят и выполнен!"); PlayStereoSound("interface\notebook.wav"); PlayStereoSound("interface\notebook.wav"); NextDiag.TempNode = "Meeting"; break;
Примечание... В качестве базового вида корпуса можно взять строго первый. Тогда в кейсе "Ship_Unique_Return" нужно в качестве параметра задать именно "1", а в первом кейсе "Ship_Unique_Upgrade" задать либо "2", либо "3". Или сделать в диалоге выбор между этими двумя, если у вас в ресурсах игры будут три разных набора текстур для корабля. Это уж как удобно и как кому понравится. Можно написать отдельные кейсы для каждого квестового корабля и переписать алгоритм, сделать его глобальным.
Вот, собственно, и всё... Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Значение атрибута ship.upgrades.hull указывает вам текущий номер папки с текстурами для данного корабля: 1 - hull1; 2 - hull2; 3 - hull3; Больше ставить нет смысла, т.к. распознаются только три папки.
поправочка: три типа текстур прописаны для всех кораблей, но можно использовать и свои текстуры из папок hull4, hull5 и т.д. для этого юзаем такой атрибут для судна RealShips[pchar.ship.type].ship.upgrades.hull = n; где n номер папки, т.е. "hulln" (hull5, hull28 и т.д. и т.п.)
ну и примерчик как все это должно выглядеть в функции
но можно использовать и свои текстуры из папок hull4, hull5 и т.д.
Ух ты, спасибо! Не знал... Но в любом случае тем, кто захочет сделать универсальный метод, придётся писать ещё кучу условий для отделения квестовых кораблей от обычных. Я-то данный пример только для "Миража" писал. Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Публикую здесь ещё один способ решать некоторые проблемы в играх серии "Корсары".
Урок: "Создание скриптов для мгновенного переноса кучи предметов в инвентарь главного героя..."
Цель урока: облегчить игроку рутинную и нудную процедуру перетаскивания сокровищ со дна подводной локации или любой другой части квеста.
Итак, предположим, Вы уже не в первый раз играете в игру и хотите по-прежнему вытащить все сокровища из сундуков в подводной локации ГПК или Острова Справедливости, но таскать рутинно по частям туда-сюда, бегать постоянно к Механику через сложнейшую и нудную цепь локаций вроде барка "Сан-Габриэль" Вам жутко надоело... Как же поступить?..
Предлагаю своё решение этой проблемы...
Шаг 1. Для начала определитесь, что и откуда Вы собираетесь перетащить. Если это подводная локация ГПК (Острова Справедливости), то заполнение сундуков там происходит в файле описания локации. А именно: \locations\init\QuestLocations.c. Именно там находится процедура заполнения сундуков под водой. Открываем файл и находим там такие строки...
Теперь мы знаем, чем заполнены сундуки в подводной локации. Пришло время написать небольшой скрипт для автоматизации процесса переноса всех ценностей в одно место. В данном случае я переношу всё в инвентарь главного героя. Может возникнуть вопрос: "Зачем? И почему именно в инвентарь, а не в сундук?" Отвечаю... Для удобства собственноручной раскладки ценностей по сундукам. Ибо я храню вещи только в главном капитанском рундуке, а Вы, возможно - в рундуке на орудийной палубе или вообще в другом месте.
Шаг 2. Написание скрипта. Для удобства я использую отладчик. Он же debuger.c в подкаталоге interface. Как многие наверняка уже знают - отладчик используется для контроля и отладки написанного кода. Но мы им воспользуемся иначе.
Просмотрите сам файл. Я буду использовать для скрипта функцию CalculateInfoDataF31() - она вызывается при нажатии кнопки F31 в отладчике (в К:КС). Она позволяет получить "Супер корабль, полную прокачку ГГ, все перки, предметы..."
Так вот. Скрываем все строки, начинающиеся ниже строки
Вот и всё... Теперь можно сохранить и закрыть файл. На время неактивности я скрываю этот приведённый выше код в комментариях и вывожу основной код для нужд отладчика.
Шаг 3. Запуск скрипта на выполнение. Тут всё просто. Обязательно сделайте в игре контрольное сохранение где-нибудь в каюте или на улице ГПК. Выйдите из игры. Включите в файле _LSC_on_off.h отладчик. Запустите игру, загрузите сохранение. Загрузите отладчик и выполните скриптовую команду F31. После успешного выполнения сохраните файл. Выгрузите игру и отключите в указанном выше файле отладчик.
Всё. Можно загружаться и играть как и раньше. Раскладывайте "вытащенные" со дна сокровища в свои сундуки и закрома!
Примечание! Если Вы хотите вместо подводной локации перетащить "экспрессом" любые другие богатства, то просто узнайте их количество и тип по квесту. Пропишите в указанную выше процедуру вместо готового скрипта и сделайте всё то же самое. Если хотите перебросить все вещи сразу в нужное место - просто укажите корректно его в теле процедуры, описанной выше... Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!